3

我正在尝试将希伯来语中的字符串保存到文件中,同时对文件进行 ANSI 编码。恐怕所有的尝试都失败了。

  1. 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 DID 工作。所以函数本身可以工作,但由于某种原因它没有转换为 1252。

我在之前和之后运行了这个函数iconv并打印了结果

mb_detect_encoding ($to_file);

iconv编码为 UTF-8 之前。编码
后为 ASCII(??)iconv

我非常感谢您提供的任何帮助

4

2 回答 2

5

Windows-1252拉丁编码;您不能在 Windows-1252 中对希伯来字符进行编码。这就是为什么它不起作用。
Windows-1255是希伯来语的编码,这就是它起作用的原因。

它不起作用的原因mb_convert_encodingmb_ 不支持 Windows-1255

根据定义,检测编码是不可能的。Windows-1255 是单字节编码;几乎不可能区分任何一种单字节编码。结果在 ASCII 中与在 Windows-1255 或 Windows-1252 或 ISO-8859 或任何其他单字节编码中一样有效。

有关更多信息,请参阅每个程序员绝对、肯定需要了解的有关编码和字符集以使用文本的知识。

于 2014-07-24T07:23:34.563 回答
0

你可以使用这个:

<?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 - 我们打印 hebrew ANSI Windows 1255 时得到的结果

טקסט בעברית .. # <- $utf - 将 ANSI Windows 1255 转换为现在的 UTF ...:)

于 2016-10-10T19:15:03.687 回答