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

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

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

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

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

Комментарии к вопросу (2)
Решение

Посмотрите на 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.

Комментарии (4)

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

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

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

Комментарии (3)

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

$значение = mb_convert_encode($значение,'в формате HTML-сущности','кодировка UTF-8');

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

Комментарии (0)

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

 <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);

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

Комментарии (0)

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

Комментарии (0)

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

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            'ä',
            'ö',
            'ü',
            'é',
            'à',
            'è'
        ),
        $data 
    );
}
Комментарии (0)

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

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

Комментарии (0)

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

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
Комментарии (0)

Использовать html_entity_decode()ифункция htmlentities()`.

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

функция htmlentities() форматы входных данных в кодировке utf8иhtml_entity_decode()форматы его обратно вИСО-8859-1`.

Комментарии (0)
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');       
     }
}
Комментарии (1)