开发过程中遇到一种奇怪的编码格式:
每日一色|蓝白~
使用decode/unescape/decodeURI解码均无效.研究一番,总结一下.
实际上上面这种奇怪的编码格式并不是编码,而是一种叫做 NCR(Numeric Character Reference) 的标记结构.
Numeric Character Reference
看看维基百科的解释:
A numeric character reference (NCR) is a common markup construct used in SGML and other SGML-related markup languages such as HTML and XML. It consists of a short sequence of characters that, in turn, represent a single character from the Universal Charact
NCR是一种常见的标记结构,用于SGML和其他SGML相似的标记语言,如HTML和XML。它由一个短的字符序列组成,代表一个字符(全球的文字字符)。
NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的, 如:
&#dddd;&#xhhhh;&#name;
其中, dddd是字符编码的十进制表示, 而hhhh是字符的16进制表示.
以 HTML 为例,这三种转义序列都称作 character reference:
前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「」开头的后接十进制数字,以「」开头的后接十六进制数字。
后一种是 character entity reference,后接预先定义的 entity 名称,而 entity 声明了自身指代的字符。
从 HTML 4 开始,NCR 以 Unicode 为准,与文档编码无关。
「中国」二字分别是 Unicode 字符 U+4E2D 和 U+56FD,十六进制表示的 code point 数值「4E2D」和「56FD」就是十进制的「20013」和「22269」。所以——
中国中国
——这两种 NCR 写法都会在显示时转换为「中国」二字。
如何将 NCR 字符转换成真实字符
方法如下:
var regex_num_set = /&#(/d+);/g;var str = "Here is some text: 每日一色|蓝白~"str = str.replace(regex_num_set, function(_, $1) { return String.fromCharCode($1);});document.write('<pre class="brush:php;toolbar:false">'+JSON.stringify(str,0,3));
以上例子使用了 String.prototype.replace() 和 String.fromCharCode() 方法. 思路为将字符串中的 NCR 字符逐个获取到 “”和”;”间的 Unicode 字符编码值, 然后利用 String.fromCharCode() 方法, 将 Unicode 编码转为真实字符.
博客文章地址: http://joebon.cc/convert-numeric-chracter-reference-to-actual-character
参考资料
-
开头的是什么编码呢。浏览器可以解释它。如中国等同与中文”中国”?
-
Converting numeric character reference to actual character
-
String.prototype.replace()
-
[字符编码]Numeric Character Reference和HTML Entities(一)

公眾號網頁更新緩存,這玩意兒,說簡單也簡單,說複雜也夠你喝一壺的。你辛辛苦苦更新了公眾號文章,結果用戶打開還是老版本,這滋味,誰受得了?這篇文章,咱就來扒一扒這背後的彎彎繞繞,以及如何優雅地解決這個問題。讀完之後,你就能輕鬆應對各種緩存難題,讓你的用戶始終體驗到最新鮮的內容。先說點基礎的。網頁緩存,說白了就是瀏覽器或者服務器為了提高訪問速度,把一些靜態資源(比如圖片、CSS、JS)或者頁面內容存儲起來。下次訪問時,直接從緩存裡取,不用再重新下載,速度自然快。但這玩意兒,也是個雙刃劍。新版本上線,

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

本文展示了使用CSS為網頁中添加有效的PNG邊框。 它認為,與JavaScript或庫相比,CSS提供了出色的性能,詳細介紹瞭如何調整邊界寬度,樣式和顏色以獲得微妙或突出的效果

本文討論了html&lt; datalist&gt;元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

本文討論了HTML&lt; Progress&gt;元素,其目的,樣式和與&lt; meter&gt;元素。主要重點是使用&lt; progress&gt;為了完成任務和LT;儀表&gt;對於stati

本文解釋了HTML5&lt; time&gt;語義日期/時間表示的元素。 它強調了DateTime屬性對機器可讀性(ISO 8601格式)的重要性,並在人類可讀文本旁邊,增強Accessibilit

本文討論了HTML&lt; meter&gt;元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了&lt; meter&gt;從&lt; progress&gt;和前


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),