【发布时间】:2011-08-18 11:12:10
【问题描述】:
是否有将 UTF-8 更改为 Unicode 将非特殊字符保留为普通字母和数字的功能?
即德语单词“tchüß”将呈现为“tch\20AC\21AC”之类的东西(请注意,我正在制作 Unicode 代码)。
编辑:我正在试验以下功能,但虽然这个功能适用于 ASCII 32-127,但对于双字节字符来说似乎失败了:
function strToHex ($string)
{
$hex = '';
for ($i = 0; $i < mb_strlen ($string, "utf-8"); $i++)
{
$id = ord (mb_substr ($string, $i, 1, "utf-8"));
$hex .= ($id <= 128) ? mb_substr ($string, $i, 1, "utf-8") : "&#" . $id . ";";
}
return ($hex);
}
有什么想法吗?
编辑 2:找到解决方案:PHP ord() 函数不适用于双字节字符。改用:http://nl.php.net/manual/en/function.ord.php#78032
【问题讨论】:
-
将标题更改为更具描述性的名称 - UTF-8 是 Unicode。您可能正在寻找“UTF-8 到 Unicode 代码点”。
-
一个有用的资源:@987654322@
-
如何定义“非特殊字符”?
-
不,您不能将 UTF-8 转换为 Unicode,除非是通过身份操作的病态情况。定义“无特殊字符”和“正常的字母和数字!像“%”和“/”这样的字符是特殊的吗?Control-C 呢?是什么使字母或数字正常或异常?ñ U+00F1 和 ð U+00F0 普通字母?什么是 ñ 真的是 n 后跟 U+0303?那么,是什么让字符成为字母或数字? ¼ U+00BC 和 ² U+00B2 不是数字吗?Unicode 6.0.0 有 100,520 个 GC=Letter 和 1,100 个 GC=Number 代码点,其中 456 个是 GC=Letter_Number 像 Ⅷ。(继续...)
-
Adrien:我永远不会想到这个定义。这意味着 Unicode 的 1,114,112 个代码点,其中只有 94 个是非特殊字符,剩下 1,114,018 个被归类为“特殊字符”?这真是违反直觉。我声称发生频率低于其他数量五个数量级的那些是特殊的。否则,您就已经颠覆了特殊性的想法。从我的角度来看,实际上是代码点 32-126 是特殊的,而不是非特殊的。看不到将 99.99% 的东西称为“特殊”。正如我所说,我永远不会想到。