无法使用PHP在Linux上将数据转换为Latin 1

时间:2011-11-08 15:00:46

标签: php encoding

我试图遍历一组javascript文件,检测它们的编码,然后以latin1和utf8格式保存它们。到目前为止,我一直坚持尝试让PHP将UTF-8文件转换为Latin1。我在搜索后尝试了几种不同的数据编码方法,但似乎没有任何效果。

这是我正在做的事情:

//Read file 
$fileIn = fopen($dirName . $fileNameIn, 'r');
$dataIn = fread($fileIn, filesize($dirName . $fileNameIn));
fclose($fileIn);

$encoding = mb_detect_encoding($dataIn);
echo "Encoding in: " . $encoding . "\r\n";

$dataOut = utf8_decode($dataIn);

echo "Encoding after: " . mb_detect_encoding($dataOut) . "\r\n";

这两个打印输出都将UTF-8打印为检测到的编码。有什么想法吗?

这与我的ubuntu盒子上的系统默认是UTF-8这个事实有什么关系吗?

2 个答案:

答案 0 :(得分:1)

您可能需要查看iconv函数(http://www.php.net/manual/en/book.iconv.php):

string iconv ( string $in_charset , string $out_charset , string $str )

因此,请尝试编写

 $dataOut = iconv($encoding, "ISO-8859-1", $dataIn);

并查看是否可以解决问题。另外,请尝试在mb_detect_encoding中使用严格模式:

mb_detect_encoding($dataOut, mb_detect_order(), true);

答案 1 :(得分:1)

mb_detect_encoding可能是用词不当,因为技术上不可能检测到编码。如果您不知道编码,则只能猜测(参见Summaries of supported encodings)。

从技术上讲,字符串可以有多个编码,但mb_detect_encoding只返回一个值。如上所述,检测编码在技术上是不可能的。

在检查特定编码时,您可以使用其他参数:

echo "Encoding after: " . mb_detect_encoding($dataOut, 'ISO-8859-1', TRUE) . "\r\n";

也许这有帮助,只检查ISO-8859-1并严格执行。