我试图将希伯来语字符串保存到文件,同时对文件进行ANSI编码。恐怕所有的尝试都失败了。
- PHP文件本身是UTF-8格式。
下面是我要写的代码:
$to_file = "בדיקה אם נרשם";
$to_file = mb_convert_encoding($to_file, "WINDOWS-1255", "UTF-8");
file_put_contents(dirname(__FILE__) ."/txt/TESTING.txt",$to_file);
由于某种原因返回false
另一次尝试是:
$to_file = iconv("UTF-8", "windows-1252", $to_file);
返回一个空字符串。虽然这不起作用,但将输出字符集更改为windows-1255确实有效。所以函数本身可以工作,但由于某些原因,它不能转换为1252。
我在iconv
之前和之后运行这个函数并打印结果
mb_detect_encoding ($to_file);
iconv
前的编码为UTF-8。iconv
后编码为ASCII(??)
我非常感谢你能给我的任何帮助
Windows-1252是一个拉丁编码;不能在Windows-1252中编码希伯来字符。这就是为什么它不起作用。
Windows-1255是希伯来语的编码,这就是它工作的原因。
不支持mb_convert_encoding
的原因是mb_不支持Windows-1255。
根据定义检测编码是不可能的。Windows-1255是单字节编码;几乎不可能区分任何一个字节编码和另一个字节编码。结果在ASCII中与在Windows-1255或Windows-1252或ISO-8859或任何其他单字节编码中一样有效。
查看每个程序员绝对需要知道的编码和字符集来处理文本的更多信息。
你可以这样做:
<?php
$heb = 'טקסט בעברית .. # ';
$utf = preg_replace("/(['xE0-'xFA])/e","chr(215).chr(ord('${1})-80)",$heb);
echo '<pre>';
print_r($heb);
echo '<pre>';
echo '------';
echo '<pre>';
print_r($utf);
echo '<pre>';
?>
输出将像这样:
……# <——$heb -当我们打印希伯来文ANSI Windows 1255
……# <- $utf -已转换的ANSI Windows 1255到现在的utf…:)