Проблема записи файла в кодировке UTF-8 на PHP - PullRequest
3 голосов
/ 20 августа 2010

У меня есть большой файл, который содержит страны / регионы мира, которые я разделяю на файлы меньшего размера, основанные на отдельных странах / регионах.Исходный файл содержит записи типа:

  EE.04 Järvamaa
  EE.05 Jõgevamaa
  EE.07 Läänemaa

Однако, когда я извлекаю это и записываю его в новый файл, текст становится:следующий код:

mb_detect_encoding($text, "UTF-8") == "UTF-8" ? : $text = utf8_encode($text);
$fp = fopen(MY_LOCATION,'wb');
fwrite($fp,$text);
fclose($fp);

Я пытался сохранить файлы с использованием и без utf8_encode (), но ни один из них не работаетКак мне сохранить исходную кодировку (UTF8)?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 20 августа 2010

Во-первых, не зависит от mb_detect_encoding.Неплохо выяснить, что такое кодировка, если только нет набора кодировок конкретных сущностей (то есть сущностей, которые недопустимы в других кодировках).

Попробуйте просто избавиться от строки mb_detect_encoding все вместе.*

О, и utf8_encode превращает строку Latin-1 в строку UTF-8 (не из произвольного набора символов в UTF-8, что вам действительно нужно) ... Выхотите iconv, но вам необходимо знать исходную кодировку (и поскольку вы не можете действительно доверять mb_detect_encoding, вам необходимо выяснить это другим способом).

Или вы можете попробовать использовать iconv с пустой входной кодировкой $str = iconv('', 'UTF-8', $str); (которая может работать или не работать) ...

1 голос
/ 31 августа 2012

Так не работает.Даже если вы используете utf8_encode ($ theString), вы НЕ СОЗДАЕТЕ файл UTF8.

Правильный ответ имеет отношение к метке порядка байтов UTF-8 .

Это, чтобы понять проблему: - http://en.wikipedia.org/wiki/Byte_order_mark
- http://unicode.org/faq/utf_bom.html

Решение состоит в следующем: Поскольку метка порядка байтов UTF-8 равна '\ xef \ xbb \ xbf'мы должны добавить его в заголовок документа.

<?php
function writeStringToFile($file, $string){
$f=fopen($file, "wb");
$file="\xEF\xBB\xBF".$string; // utf8 bom
fputs($f, $string);
fclose($f);
}
?>

Файл $ может быть любым текстом или xml ... Строка $ - это строка в кодировке UTF8.

Попробуйте это сейчас ион запишет файл в кодировке UTF8 с вашим содержимым UTF8 (строка).

writeStringToFile('test.xml', 'éèàç');
0 голосов
/ 03 ноября 2012

Может быть, вы хотите вызвать htmlentities($text) перед записью в файл и html_entity_decode($fetchedData) перед выводом.Это будет работать со скандинавскими буквами.

0 голосов
/ 20 августа 2010

Похоже, что ваш исходный файл отсутствует в UTF-8.Возможно, вы захотите попробовать использовать тот же подход, который вы использовали, но с другой кодировкой, например, UTF-16.

0 голосов
/ 20 августа 2010

Вы можете сделать это следующим образом:

<?php
$s = "This is a string éèàç and it is in utf-8";
$f = fopen('myFile',"w");
fwrite($f, utf8_encode($s));
fclose($f);
?> 
...