1

我一直在寻找我的!!!试图找到一个 PHP 函数来将 UTF8 转换为等效数字。我不完全确定如何称呼这个数字(我听说它被称为纵坐标?)但这里有一个例子:http: //jrgraphix.net/r/Unicode/3040-309F

基本上我试图在 PHP 中读取一个 UTF-8 .txt 文件,然后将每一行保存在一个数组中,这样我就可以搞砸它了。

如果有人可以帮助我,我将不胜感激,因为我对 UTF8 还不是很熟悉。

编辑:这是我到目前为止所得到的:

echo "var TextCharacters = new Array();\n";

$LineArray = array();
$file_handle = fopen("lesson1.txt", "r");


while (!feof($file_handle)) 
{
  $line_of_text = fgets($file_handle);  
  array_push($LineArray, $line_of_text);
}

fclose($file_handle);

foreach($LineArray as $s)
{
    for($i = 0; $i < mb_strlen($s,"utf-8"); $i++)
    {
        $char = mb_substr($s, $i, 1, "utf-8");
        echo "alert(go(" . bin2hex(iconv('UTF-8', 'UCS-2', $char)) . "));";         
    }
}
4

2 回答 2

4

您正在寻找的是 Unicode 代码点,即在 Unicode 字符表中知道该字符的数字标识符。“最便宜”的方法是通过 UCS-2 字符编码,它将 1:1 从字节映射到 Unicode 代码点:

echo bin2hex(iconv('UTF-8', 'UCS-2', 'あ'));
// 3042

警告:返回的代码总是 4 个十六进制数字长(您可能喜欢也可能不喜欢)并且 UCS-2 不支持高于 BMP 的字符,即高于代码点 FFFF。

于 2012-07-18T12:54:08.440 回答
-1

PHP 中的 UTF-8 没有什么神奇之处。当您读取文件时,您将获得字节值(而不是被解析为字符)。迭代您已读取的数据并使用ord()获取字节的十进制值。

如果要使用 UTF-8 代码点执行此操作,可以使用mb_substriconv_substr提取每个字符,然后使用 ord() 打印组成字符的每个字节的值。

更新:要扩展完整的解决方案:

utf8.test:fooÆØÅござ

$utf8 = file_get_contents("utf8.test");

for ($i = 0; $i < mb_strlen($utf8, "utf-8"); $i++)
{
    $char = mb_substr($utf8, $i, 1, "utf-8");

    print($char);
    print("\n");

    for ($j = 0; $j < strlen($char); $j++)
    {
        print(dechex(ord($char[$j])));
    }

    print("\n\n");
}

输出:

f
66

o
6f

o
6f

Æ
c386

Ø
c398

Å
c385

ご
e38194

ざ
e38196

希望有帮助。

于 2012-07-18T12:04:19.427 回答