如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?
Posted
技术标签:
【中文标题】如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?【英文标题】:How do I get the unicode/hex representation of a symbol out of the HTML using JavaScript/jQuery? 【发布时间】:2011-10-02 03:47:15 【问题描述】:假设我有一个这样的元素...
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mo class="symbol">α</mo>
</math>
有没有办法使用 javascript/jQuery 获取 alpha α
、&#x03B1
的 unicode/hex 值?有点像...
$('.symbol').text().unicode(); // I know unicode() doesn't exist
$('.symbol').text().hex(); // I know hex() doesn't exist
我需要&#x03B1
而不是α
,似乎每当我将&#x03B1
插入DOM 并尝试立即检索它时,它都会被渲染,我无法找回&#x03B1
;我只是得到α。
【问题讨论】:
【参考方案1】:如果您尝试以上述方式将 Unicode 字符从 BMP (basic multilingual plane) 转换出来 - 您会大吃一惊。 BMP 之外的字符被编码为多个UTF16
值,例如:
"?".length
= 2(卸扣一份,锁座一份:)
所以"?".charCodeAt(0)
会给你55357
,这只是数字的“一半”,而"?".charCodeAt(1)
会给你56594
,这是另一半。
要获取您可能想要使用的这些值的字符代码,请使用以下字符串扩展函数
String.prototype.charCodeUTF32 = function()
return ((((this.charCodeAt(0)-0xD800)*0x400) + (this.charCodeAt(1)-0xDC00) + 0x10000));
;
你也可以这样使用
"&#x"+("?".charCodeUTF32()).toString(16)+";"
获取 html 十六进制代码。
希望这可以为您节省一些时间。
【讨论】:
+1 感谢您将我们从地雷中拯救出来!检查字符的长度是我的关键。 很好的洞察力,并注意不仅仅是表情符号超出了 BMP :) 您的原型增强可能应该首先检查长度;对于“UTF-8”字符串,this.charCodeAt(1)
返回NaN
,因此整个函数也将如此;对于“length === 2”字符,它应该只返回charCodeAt(0)
。【参考方案2】:
例如,如果您需要将此十六进制代码转换为 unicode
e68891e4bda0e4bb96
-
按时间选择两个字符,
如果 dec ascii 码超过 127 ,则在前面加一个 %
返回url解码字符串
函数 hex2a(hex) var str = ''; for (var i = 0; i
var dec = parseInt(hex.substr(i, 2), 16);
character = String.fromCharCode(dec);
if (dec > 127)
character = "%"+hex.substr(i,2);
str += character;
return decodeURI(str);
【讨论】:
【参考方案3】:charCodeAt
将为您获取字符串的十进制值:
"α".charCodeAt(0); //returns 945
0x03b1 === 945; //returns true
toString
然后会得到十六进制字符串
(945).toString(16); // returns "3b1"
(已确认可在 IE9 和 Chrome 中运行)
【讨论】:
【参考方案4】:主要使用纯 JavaScript,您应该能够做到:
function entityForSymbolInContainer(selector)
var code = $(selector).text().charCodeAt(0);
var codeHex = code.toString(16).toUpperCase();
while (codeHex.length < 4)
codeHex = "0" + codeHex;
return "&#x" + codeHex + ";";
这是一个例子:http://jsfiddle.net/btWur/
【讨论】:
@aroth...这看起来棒极了!我现在正在测试以上是关于如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript/jQuery 从 HTML 中获取符号的 unicode/hex 表示?
如何使用 javascript/jquery 从 URL 中删除获取变量和文件名?
如何从 .cs 文件 (C#) 调用 JavaScript/jQuery 函数
使用 Javascript/jquery 如何从选定行中的每个单元格获取值
如何使用 JavaScript/jQuery 从 ASP.NET Web 窗体的 GridView 内部同时上传多个文件?