将unicode转换为html实体hex

mrd*_*iri 4 php unicode hex html-entities

如何将Unicode字符串转换为HTML实体?(HEX不是十进制)

例如,转换FrançaisFrançais.

hak*_*kre 9

对于相关问题中缺少的十六进制编码:

$output = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($match) {
    list($utf8) = $match;
    $binary = mb_convert_encoding($utf8, 'UTF-32BE', 'UTF-8');
    $entity = vsprintf('&#x%X;', unpack('N', $binary));
    return $entity;
}, $input);
Run Code Online (Sandbox Code Playgroud)

这是类似于使用@巴巴的回答UTF-32BE,然后unpackvsprintf该格式的需求.

如果你喜欢iconvmb_convert_encoding,这是类似的:

$output = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($match) {
    list($utf8) = $match;
    $binary = iconv('UTF-8', 'UTF-32BE', $utf8);
    $entity = vsprintf('&#x%X;', unpack('N', $binary));
    return $entity;
}, $input);
Run Code Online (Sandbox Code Playgroud)

我发现这个字符串操作比获取html实体的十六进制代码要清楚一点.


Bab*_*aba 8

您的字符串看起来像UCS-4您可以尝试的编码

$first = preg_replace_callback('/[\x{80}-\x{10FFFF}]/u', function ($m) {
    $char = current($m);
    $utf = iconv('UTF-8', 'UCS-4', $char);
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $string);
Run Code Online (Sandbox Code Playgroud)

产量

string 'Français' (length=13)
Run Code Online (Sandbox Code Playgroud)


Ang*_*gad 5

首先,当我最近遇到这个问题时,我通过确保我的代码文件、数据库连接和数据库表都是UTF-8来解决它,然后,简单地回显文本即可。如果必须转义数据库的输出,请使用htmlspecialchars()而不是htmlentities()这样,UTF-8 符号将被单独保留并且不会被尝试转义。

想要记录一个替代解决方案,因为它为我解决了类似的问题。我使用 PHPutf8_encode()来转义“特殊”字符。

我想将它们转换为 HTML 实体进行显示,我编写这段代码是因为我想尽可能避免 iconv 或此类函数,因为并非所有环境都必须有它们(如果不是这样,请纠正我!)

function unicode2html($string) {
    return preg_replace('/\\\\u([0-9a-z]{4})/', '&#x$1;', $string);
}

$foo = 'This is my test string \u03b50';
echo unicode2html($foo);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助有需要的人:-)