Преобразование utf8-символов в iso-88591 и обратно в PHP
некоторые из моих скриптов используют другую кодировку, и когда я пытаюсь их объединить, это становится проблемой.
но я не могу изменить кодировку, которую они используют, вместо этого я хочу изменить кодировку результата из скрипта A и использовать его в качестве параметра в скрипте B.
Итак: есть ли простой способ изменить строку с UTF-8 на ISO-88591 в PHP? Я просмотрел utf_encode и _decode, но они не делают то, что я хочу. Почему не действует любой "utf2iso ()" - функция или аналогичная?
Я не думаю, что у меня есть символы, которые не могут быть написаны в ISO-формате, так что это не должно быть огромной проблемой.
10 ответов
посмотреть iconv()
или mb_convert_encoding()
.
Кстати, почему бы и нет?--13-->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 пример строки, для которой преобразование завершается неудачей или дает неожиданные результаты.
установите метатег в head как
<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 (
'ä',
'ö',
'ü',
'é',
'à',
'è'
),
$data
);
}
в моем случае после загрузки файлов с именами, содержащими эти символы, они даже не были видны с Filezilla! В cPanel filemanager они были показаны с ? (под черным фоном). И эта комбинация сделала его показанным правильно в браузере (HTML-документ закодирован в Западной кодировке):
$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
лучше использовать
$value = mb_convert_encode ($value, 'HTML-сущности', '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');
}
}