将UTF-8转换为ANSI(windows-1252)

时间:2014-07-24 07:01:59

标签: php encoding utf-8 iconv windows-1252

我试图将希伯来语中的字符串保存到文件中,同时使用ANSI编码的文件。 所有尝试都失败了,我很害怕。

  1. PHP文件本身是UTF-8。
  2. 所以这是我尝试的代码:

    $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);
    

    返回一个空字符串。虽然这不起作用,将outpout charset更改为windows-1255 DID工作。所以函数本身有效,但由于某种原因它不能转换为1252。

    我在iconv之前和之后运行了此功能并打印了结果

    mb_detect_encoding ($to_file);

    iconv编码为UTF-8之前

    iconv之后编码是ASCII(??)

    我非常感谢你能给予的任何帮助

2 个答案:

答案 0 :(得分:5)

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

它与mb_convert_encoding不起作用的原因是mb_ doesn't support Windows-1255

根据定义,

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

有关详细信息,请参阅What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text

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

输出将如下:

..#&lt; - $ heb - 我们打印希伯来语ANSI Windows 1255后得到的结果

טקסטבעברית..#&lt; - $ utf - 转换的ANSI Windows 1255到现在的UTF ...:)