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