Невозможно преобразовать данные в Latin 1 в Linux с помощью PHP - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь перебрать набор файлов 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 ]

1 голос
/ 08 ноября 2011

mb_detect_encoding может быть неправильным, поскольку технически невозможно обнаружить кодировки.Если вы не знаете кодировку, вы можете только догадываться (см. Краткое изложение поддерживаемых кодировок ).

С технической точки зрения, строка может иметь несколько кодировок, но mb_detect_encoding вернет толькоодно значение.И, как написано, технически невозможно обнаружить кодировку.

Когда вы проверяете специфическую кодировку *1011*, вы можете использовать дополнительные параметры:

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

Может быть, это помогает, проверяет только ISO-8859-1 и делает это строго.

1 голос
/ 08 ноября 2011

Возможно, вы захотите взглянуть на функцию 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...