Преобразование utf8-символов в iso-88591 и обратно в PHP

Некоторые из моих сценариев используют разные кодировки, и когда я пытаюсь их объединить, это становится проблемой.

Но я не могу изменить кодировку, которую они используют, вместо этого я хочу изменить кодировку результата из сценария A и использовать его как параметр в скрипте B.

Итак: есть ли простой способ изменить строку из UTF-8 в ISO-88591 в PHP? Я посмотрел на utf_encode и _decode, но они не делают то, что я хочу. Почему нет exsist какой-либо функции «utf2iso ()» или аналогичной?

Я не думаю, что у меня есть символы, которые нельзя записать в формате ISO, так что это не должно быть огромной проблемой.

Посмотрите на iconv() или mb_convert_encoding() . Как раз кстати: почему не utf8_encode() и utf8_decode() ?

utf8_decode – преобразует строку с символами ISO-8859-1, кодированными с UTF-8, в однобайтовый ISO-8859-1

utf8_encode – кодирует строку ISO-8859-1 для UTF-8

По существу

 $utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded $iso88591_1 = utf8_decode($utf8); $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8); $iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8'); $iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded $utf8_1 = utf8_encode($iso88591); $utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591); $utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1'); 

все должно сделать то же самое – с utf8_en/decode() требующим специального расширения, mb_convert_encoding() требующее ext / mbstring и iconv() требующих ext / iconv.

Прежде всего, не используйте разные кодировки. Это приводит к беспорядку, и UTF-8 определенно тот, который вы должны использовать везде.

Скорее всего, ваш ввод не ISO-8859-1, а нечто другое (ISO-8859-15, Windows-1252). Для преобразования из них используйте iconv или mb_convert_encoding .

Тем не менее, utf8_encode и utf8_decode должны работать для ISO-8859-1. Было бы неплохо, если бы вы могли опубликовать ссылку на файл или примерную строку uuencoded или base64, для которой преобразование завершается с ошибкой или дает неожиданные результаты.

установить метатег в голове как

  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

используйте ссылку http://www.i18nqa.com/debug/utf8-debug.html, чтобы заменить символы, которые вы хотите.

затем используйте str_replace как

  $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash $replace = array('“', ''', '…', '—', '–', ''', 'é', '', '•', '˜', '”'); $content = str_replace($find, $replace, $content); 

Его метод я использую и помогаю много. Благодаря!

Вам нужно использовать пакет iconv , в частности его функцию iconv.

Я использую эту функцию:

 function formatcell($data, $num, $fill=" ") { $data = trim($data); $data=str_replace(chr(13),' ',$data); $data=str_replace(chr(10),' ',$data); // translate UTF8 to English characters $data = iconv('UTF-8', 'ASCII//TRANSLIT', $data); $data = preg_replace("/[\'\"\^\~\`]/i", '', $data); // fill it up with spaces for ($i = strlen($data); $i < $num; $i++) { $data .= $fill; } // limit string to num characters $data = substr($data, 0, $num); return $data; } echo formatcell("YES UTF8 String Zürich", 25, 'x'); //YES UTF8 String Zürichxxx echo formatcell("NON UTF8 String Zurich", 25, 'x'); //NON UTF8 String Zurichxxx 

Проверьте мою функцию в своем блоге http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8

Я использовал:

 function utf8_to_html ($data) { return preg_replace( array ( '/ä/', '/ö/', '/ü/', '/é/', '/à/', '/è/' ), array ( '&auml;', '&ouml;', '&uuml;', '&eacute;', '&agrave;', '&egrave;' ), $data ); } 

В моем случае после того, как файлы с именами, содержащими эти символы, были загружены, они не были даже видны с помощью Filezilla! В Cpanel filemanager они были показаны с? (на черном фоне). И эта комбинация показала ее правильно в браузере (HTML-документ закодирован в западном направлении):

 $dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) ); 

Гораздо лучше использовать

$ value = mb_convert_encode ($ value, 'HTML-ENTITIES', 'UTF-8');

Специально, когда вы используете вызов AJAX для отправки символов ISO-8859-1. Он работает на китайском, японском, чешском, немецком и многих других языках.

Используйте html_entity_decode() и htmlentities() .

 $html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1'); 

htmlentities() форматирует ваш вход в UTF8 а html_entity_decode() форматирует его обратно в ISO-8859-1 .

 function parseUtf8ToIso88591(&$string){ if(!is_null($string)){ $iso88591_1 = utf8_decode($string); $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $string); $string = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8'); } }