UTF8到php中的等价数字

时间:2012-07-18 12:00:26

标签: php encoding utf-8

我一直在寻找我的!!!试图找到一个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)) . "));";         
    }
}

2 个答案:

答案 0 :(得分:4)

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

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

注意事项:返回的代码总是长度为4个十六进制数字(您可能喜欢或不喜欢),UCS-2不支持高于BMP的字符,即高于代码点FFFF。

答案 1 :(得分:-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

希望有所帮助。