无法在Linux上使用PHP将数据转换为拉丁语1

无法在Linux上使用PHP将数据转换为拉丁语1,php,encoding,Php,Encoding,我试图循环遍历一组javascript文件,检测它们的编码,然后将它们保存为拉丁文1和utf8格式。到目前为止,我一直在尝试让PHP将UTF-8文件转换为拉丁语1。在四处搜索之后,我尝试了几种不同的数据编码方法,但似乎没有任何效果 以下是我正在做的: //Read file $fileIn = fopen($dirName . $fileNameIn, 'r'); $dataIn = fread($fileIn, filesize($dirName . $fileNameIn)); fclos

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

以下是我正在做的:

//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 box上的系统默认值是UTF-8有关吗?

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

因此,尝试写作

 $dataOut = iconv($encoding, "ISO-8859-1", $dataIn);
看看这是否能解决问题。此外,请尝试在mb_detect_编码中使用严格模式:

mb_detect_encoding($dataOut, mb_detect_order(), true);
可能是用词不当,因为技术上无法检测编码。如果您不知道编码,您只能猜测(请参阅)

从技术上讲,一个字符串可以有多个编码,但是
mb\u detect\u encoding
只返回一个值。如前所述,技术上不可能检测到编码

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

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

这可能会有所帮助,只检查ISO-8859-1,并严格执行。

从检测现在报告编码已更改的角度来看,此转换似乎有效。然而,当写入磁盘时,PHP仍然会创建一个UTF-8文件。我可能会错过转换一些数据,因为这正在工作(尽管检测没有那么可靠)
echo "Encoding after: " . mb_detect_encoding($dataOut, 'ISO-8859-1', TRUE) . "\r\n";