我试图遍历一组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这个事实有什么关系吗?
答案 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
并严格执行。