我一直在搜索我的!!!off试图找到一个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)) . "));";
}
}
您要查找的是Unicode代码点,即Unicode字符表中已知字符的数字标识符。实现这一点的"最便宜"方法是通过UCS-2字符编码,它将1:1的字节映射到Unicode代码点:
echo bin2hex(iconv('UTF-8', 'UCS-2', 'あ'));
// 3042
注意:返回的代码总是4个十六进制数字长(您可能喜欢也可能不喜欢),UCS-2不支持高于BMP的字符,即高于代码点FFFF的字符。
PHP中的UTF-8没有什么神奇之处。当您读取文件时,您将获得字节值(而不是解析为字符)。对已读取的数据进行迭代,然后使用ord()获取字节的十进制值。
如果要对UTF-8代码点执行此操作,可以使用mb_substr或iconv_subsr提取每个字符,然后使用ord()打印组成字符的每个字节的值。
更新:以完整的解决方案进行扩展:
utf8.测试: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("nn");
}
输出:
f
66
o
6f
o
6f
Æ
c386
Ø
c398
Å
c385
ご
e38194
ざ
e38196
希望能有所帮助。