gpt4 book ai didi

php - 如何在 PHP 中创建 JavaScript 转义序列?

转载 作者:可可西里 更新时间:2023-10-31 23:44:22 26 4
gpt4 key购买 nike

我正在寻找一种在 PHP 中创建有效的 UTF-16 JavaScript 转义序列字符(包括代理项对)的方法。

我正在使用下面的代码获取 UTF-32 代码点(来自 UTF-8 编码字符)。这用作 JavaScript 转义字符(例如 '\u00E1' 代表 'á')- 直到您进入获得代理项对的较高范围(例如 '𝜕' 出现为 '\u1D715' 但应该是 '\uD835\uDF15')...

function toOrdinal($chr)
{
if (ord($chr{0}) >= 0 && ord($chr{0}) <= 127)
{
return ord($chr{0});
}
elseif (ord($chr{0}) >= 192 && ord($chr{0}) <= 223)
{
return (ord($chr{0}) - 192) * 64 + (ord($chr{1}) - 128);
}
elseif (ord($chr{0}) >= 224 && ord($chr{0}) <= 239)
{
return (ord($chr{0}) - 224) * 4096 + (ord($chr{1}) - 128) * 64 + (ord($chr{2}) - 128);
}
elseif (ord($chr{0}) >= 240 && ord($chr{0}) <= 247)
{
return (ord($chr{0}) - 240) * 262144 + (ord($chr{1}) - 128) * 4096 + (ord($chr{2}) - 128) * 64 + (ord($chr{3}) - 128);
}
elseif (ord($chr{0}) >= 248 && ord($chr{0}) <= 251)
{
return (ord($chr{0}) - 248) * 16777216 + (ord($chr{1}) - 128) * 262144 + (ord($chr{2}) - 128) * 4096 + (ord($chr{3}) - 128) * 64 + (ord($chr{4}) - 128);
}
elseif (ord($chr{0}) >= 252 && ord($chr{0}) <= 253)
{
return (ord($chr{0}) - 252) * 1073741824 + (ord($chr{1}) - 128) * 16777216 + (ord($chr{2}) - 128) * 262144 + (ord($chr{3}) - 128) * 4096 + (ord($chr{4}) - 128) * 64 + (ord($chr{5}) - 128);
}
}

如何调整此代码以提供正确的 UTF-16 代码点?谢谢!

最佳答案

如何使用 iconv(或类似的 mb_convert_encoding)?

例如。像这样的东西:

$utf16= iconv('UTF-8', 'UTF-16LE', $text);
$codeunits= array();
for ($i= 0; $i<strlen($utf16); $i+= 2) {
$codeunits[]= ord($utf16{$i})+ord($utf16{$i+1})<<8;
}

关于php - 如何在 PHP 中创建 JavaScript 转义序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com