UTF-8到Unicode代码点

Adr*_*ert 6 php unicode utf-8

是否有一个函数将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);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑2:找到解决方案:PHP ord()函数不适用于双字节字符.请改用:http://nl.php.net/manual/en/function.ord.php#78032

bob*_*nce 27

对于可读形式,我会使用JSON.在JSON中不需要转义非ASCII字符,但PHP会:

echo json_encode("tchüß");

"tch\u00fc\u00df"
Run Code Online (Sandbox Code Playgroud)


小智 10

对于希望为任何字符找到Unicode代码点的人来说,这可能很有用.然后,您可以按照您想要的任何方式对字符串进行编码,使用转义码替换某些字符,并将其他字符保留为二进制形式(例如ascii可打印字符),具体取决于您要使用它的上下文.

From:将代码点映射到Unicode编码表单

UTF-32的映射本质上是标识映射:用于编码代码点的32位代码单元具有与代码点本身相同的整数值.

/**
 * Convert a string into an array of decimal Unicode code points.
 *
 * @param $string   [string] The string to convert to codepoints
 * @param $encoding [string] The encoding of $string
 * 
 * @return [array] Array of decimal codepoints for every character of $string
 */
function toCodePoint( $string, $encoding )
{
    $utf32  = mb_convert_encoding( $string, 'UTF-32', $encoding );
    $length = mb_strlen( $utf32, 'UTF-32' );
    $result = [];


    for( $i = 0; $i < $length; ++$i )

        $result[] = hexdec( bin2hex( mb_substr( $utf32, $i, 1, 'UTF-32' ) ) );


    return $result;
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*ois 6

使用PHP 7,有一个新的IntlChar :: ord()从给定的UTF-8字符中查找Unicode代码点:

var_dump(sprintf('U+%04X', IntlChar::ord('ß')));

# Outputs: string(6) "U+00DF"
Run Code Online (Sandbox Code Playgroud)


Luw*_*uwe 3

可以使用 iconv 将一种字符集转换为另一种字符集:

http://php.net/manual/en/function.iconv.php

请注意,UTF 已经是 Unicode 编码。

另一种方法是简单地使用具有正确字符集的 htmlentities:

http://php.net/manual/en/function.htmlentities.php