、定義
<meta> 標簽提供關于 HTML 文檔的元數據。它不會顯示在頁面上,但是對于機器是可讀的。可用于瀏覽器(如何顯示內容或重新加載頁面),搜索引擎(關鍵詞),或其他 web 服務。
2、作用
meta里的數據是供機器解讀的,告訴機器該如何解析這個頁面,還有一個用途是可以添加服務器發送到瀏覽器的http頭部內容,例如我們為頁面中添加如下meta標簽:
瀏覽器的頭部就會包括這些:
只有瀏覽器可以接受這些附加的頭部字段,并能以適當的方式使用它們時,這些字段才有意義。
3、meta的必需屬性和可選屬性
meta的必需屬性是content,當然并不是說meta標簽里一定要有content,而是當有http-equiv或name屬性的時候,一定要有content屬性對其進行說明。例如:
必需屬性
<meta name="keywords" content="HTML,ASP,PHP,SQL">
這里面content里的屬性就是對keywords進行的說明,所以呢也可以理解成一個鍵值對吧,就是{keywords:"HTML,ASP,PHP,SQL"}。
可選屬性
在W3school中,對于meta的可選屬性說到了三個,分別是http-equiv、name和scheme。考慮到scheme不是很常用,所以就只說下前兩個屬性吧。
http-equiv
http-equiv屬性是添加http頭部內容,對一些自定義的,或者需要額外添加的http頭部內容,需要發送到瀏覽器中,我們就可以是使用這個屬性。在上面的meta作用中也有簡單的說明,那么現在再舉個例子。例如我們不想使用js來重定向,用http頭部內容控制,那么就可以這樣控制:
<meta http-equiv="Refresh" content="5;url=http://blog.yangchen123h.cn" />
在頁面中加入這個后,5秒鐘后就會跳轉到指定頁面啦,效果可看W3school的例子
name
第二個可選屬性是name,這個屬性是供瀏覽器進行解析,對于一些瀏覽器兼容性問題,name屬性是最常用的,當然有個前提就是瀏覽器能夠解析你寫進去的name屬性才可以,不然就是沒有意義的。還是舉個例子吧:
<meta name="renderer" content="webkit">
這個meta標簽的意思就是告訴瀏覽器,用webkit內核進行解析,當然前提是瀏覽器有webkit內核才可以,不然就是沒有意義的啦。當然看到這個你可能會有疑問,這個renderer是從哪里冒出來的,我要怎么知道呢?這個就是在對應的瀏覽器的開發文檔里就會有表明的,例如這個renderer是在360瀏覽器里說明的。360瀏覽器內核控制Meta標簽說明文檔
常用meta標簽大總結
接下來就是常用的meta標簽大總結啦,我會盡可能的做到全
charset
charset是聲明文檔使用的字符編碼,解決亂碼問題主要用的就是它,值得一提的是,這個charset一定要寫第一行,不然就可能會產生亂碼了。
charset有兩種寫法
兩個都是等效的。
百度禁止轉碼
百度會自動對網頁進行轉碼,這個標簽是禁止百度的自動轉碼
<meta http-equiv="Cache-Control" content="no-siteapp" />
SEO 優化部分
viewport
viewport主要是影響移動端頁面布局的,例如:
content 參數:
各瀏覽器平臺
Microsoft Internet Explorer
Google Chrome
360瀏覽器
UC手機瀏覽器
UCBrowser_U3_API
QQ手機瀏覽器
Apple iOS
Google Android
App Links
最后——移動端常用的meta
在微信公眾號開發指定回復消息為文本格式的時候,嘗試了幾種換行方式都不行,最終了解即 XML 的換行應使用:
是字符實體編號(16進制),可以用于處理XML中文本的換行。
對應的正確代碼在第9行(部分文字有修改):
<xml> <ToUserName><![CDATA[<%= toUserName %>]]></ToUserName> <FromUserName><![CDATA[<%= fromUserName %>]]></FromUserName> <CreateTime><% createTime %></CreateTime> <MsgType><![CDATA[<%= msgType %>]]></MsgType> <% if (msgType === 'text') { if(content!=="zs") { %> <Content><![CDATA[<%= content %>]]></Content> <% } else { %> <Content>歡迎來到報名圖書館暑假工! 報名步驟: ①將招聘推文轉發至朋友圈或者40人以上的群,讓更多同學了解本招聘。為招聘方宣傳以找到更多優質學生員工。 →<a >點此進入招聘推文</a> ②回復你的資料:報名+姓名+電話號碼+深圳哪個區+可上班時間 </Content> <% }} else if (msgType === 'zs') { %> <Content><a >ddwadwada</a></Content> <% } else if (msgType === 'image') { %> <Image> <MediaId><![CDATA[<%= content.mediaId %>]]></MediaId> </Image> ... </xml>
由這個問題,我們想到web開發中還有一些類似的“亂碼”,這些亂碼又有哪些規律呢?
字符實體是XML和HTML中的字符編碼方式,也就是上面事例中提到的,格式為:
& + 實體名稱 + ; & + (# + unicode編碼) + ;
實體名稱一般是有意義的詞,方便大家記憶,比如小于號<的實體名稱是lt,也就是less than的縮寫。只有部分符號是有實體名稱的,使用unicode編碼是更通用的寫法。
像文字類一般不會采用這種編碼方式,主要用于在HTML或XML文檔中輸出一些保留字符和空格,比如我想在HTML中展示一段html代碼就需要使用字符實體
比如我們要展示`<p>情深深雨蒙蒙</p>` 以下兩種表示是等效的 ? <pre> <p>情深深雨蒙蒙</p> <p>情深深雨蒙蒙</p> </pre>
總而言之,字符實體是HTML和XML中的編碼方式,比如在HTML文檔中寫入:我,那么最終頁面上看到的是我這個漢字。
編程語言中的unicode字符的格式為:
\u + 16進制unicode編碼
絕大多數編程語言,包括CSS中都支持unicode字符,不過HTML和XML是不支持的。那么什么時候使用unicode字符呢?一般來說有兩種場景:
在JS中可以使用charCodeAt()獲取字符串的10進制unicode編碼
類似%E6%88%91這樣的,叫做URL編碼,在鏈接的參數里非常常見
網絡標準RFC 1738做了硬性規定:
“只有字母和數字[0-9a-zA-Z]、一些特殊符號”$-_.+!*'(),”[不包括雙引號]、以及某些保留字,才可以不經過編碼直接用于URL。”
所以像漢字,空格這些都必須經過轉碼。上面講的unicode字符,字符實體用的都是unicode編號,而URL編碼用的則是utf-8, 規則是將utf-8編碼每隔兩個字符加一個%
UTF 是英文 Unicode Transformation Format 的縮寫,意為把 Unicode 字符轉換為某種格式。unicode和utf-8并不是同一種東西,但是又存在著聯系:unicode是信源編碼,對字符集數字化; utf-8,utf-16這些是信道編碼,為更好的存儲和傳輸。
簡單說,unicode就是一組數字,每一個數字對應一個字符。utf-8就是對字符的傳輸和保存時的規則。比如說“我”這個字,unicode碼(16進制)是6211,utf-8是E68891, 那么對應的URL編碼就是%E6%88%91;
{ Unicode編碼: 0x6211, UTF8編碼: E68891, UTF16編碼: FEFF6211, UTF32編碼: 0000FEFF00006211 URL編碼: %E6%88%91 }
更多細節可以參考《阮一峰:關于URL編碼》
Web開發中常見的幾種亂碼包括:Unicode字符、字符實體、URL編碼。如以下情況都表示“我”:
Unicode字符: \u6211 字符實體編號(16進制):我 字符實體編號(10進制):我 URL編碼:%E6%88%91
這些編碼規則的本質都是一些特殊符號 + Unicode編碼 所組成。
點贊+轉發,讓更多的人也能看到這篇內容(收藏不點贊,都是耍流氓-_-)
關注 {我},享受文章首發體驗!
每周重點攻克一個前端技術難點。更多精彩前端內容私信 我 回復“教程”
原文鏈接:http://eux.baidu.com/blog/fe/web%E5%BC%80%E5%8F%91%E4%B8%AD%E5%B8%B8%E8%A7%81%E7%9A%84%E4%B9%B1%E7%A0%81
作者: 鄭佳潤
文將介紹一種Java Web/Api 開發常見的亂碼問題。
前提摘要:在學習Java Web的過程中,亂碼問題是經常遇到的,無論是頁面亂碼還是數據庫亂碼。本文將羅列筆者在開發過程中常常遇到幾種亂碼場景。
一、JSP頁面亂碼
因為網頁默認的編碼格式為ISO-8859-1
,該編碼格式不支持漢字,所以在網頁上顯示為亂碼???.
解決方案
在文件頂部添加header上添加
<pre>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
</pre>
二、ajax請求時 request.getParams亂碼
在你的tomcat server.xml中配置
<Connector port="8080" protocol="HTTP/1.1"
</pre>
即添加
如果你想學習java可以來這個群,五三二,二五九,九五二,里面有大量的學習資料可以下載。 URIEconding="UTF-8" useBodyEncodingForURI="true"
三、ajax請求時 response出去為亂碼
在使用Spring MVC時 須在web.xml 配置
<filter>
mvc注釋 RequestMapping 聲明 增加utf-8聲明如
@RequestMapping(method = RequestMethod.POST, produces = "application/json; charset=utf-8")
如果是普通的servlet時,則須代碼編碼之后輸出
response.setContentType("text/html;charset=UTF-8");
三、文件亂碼
經常在拿到別人的工程文件時,由于他不同的編碼例如GBK之類的編碼,需要在IDE中將文件編碼統一成UTF-8 即可.
window平臺下,可以實用notepad++進行編轉化替換即可。
四、終端亂碼
如果是 System.out.println 打印顯示亂碼 則 VM options 里 添加 -Dfile.encoding=UTF-8
參數
五、數據庫亂碼
jdbc鏈接utf-8聲明
jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
新建數據庫時,選擇utf-8/utf-8mb4編碼
六、emoji亂碼支持
新建數據庫選擇utf-8mb4
數據庫的字符集配置 參考mysql/Java服務端對emoji的支持
mysql-connector-java 版本升級至 5.1.22,此版本筆者親測 Ok!
如果你想學習java可以來這個群 532259952
*請認真填寫需求信息,我們會在24小時內與您取得聯系。