php-iconv преобразование из UTF-8 в Windows-1250 не работает
привет, ребята. У меня всегда были проблемы с iconv. Теперь я должен преобразовать строку в Windows-1250, и это, похоже, не работает:
$string = "ľaľa ho papľuha, ogrcal mi krpce!";
echo $string . ' ( ' . mb_detect_encoding($string) . ' ) <br>';
$string_encoded = iconv( mb_detect_encoding( $string ), 'Windows-1250//TRANSLIT', $string );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';
$string_encoded = mb_convert_encoding( $string, 'Windows-1250' );
echo $string_encoded . ' ( ' . mb_detect_encoding($string_encoded) . ' ) <br>';
три Эха выше выводят именно это:
ľaľa ho papľuha, ogrcal mi krpce! ( UTF-8 )
�a�a ho pap�uha, ogrcal mi krpce! ( )
mb_convert_encoding() Unknown encoding "Windows-1250" ( ASCII )
поскольку я всегда видел эти алмазные вопросительные знаки, мне интересно, работает ли эта функция php вообще. Как преобразовать UTF-8 в Windows-1250 ?
- файл был сохранен в notepad++ в UTF-8
- также я пробовал заголовок ('Content-Type: text / html; charset=windows-1250'); и setLocale()
3 ответов
символ � указывает на то, что ваш текст интерпретируется как UTF-8, но в этот момент обнаружена недопустимая последовательность байтов. Это означает, что вы не обслуживаете UTF-8, но клиент читает его как UTF-8. Что подразумевает, что iconv
работает просто отлично, и тот, кто читает результат, просто не получил сообщение о том, что он должен интерпретировать его как Windows-1250.
посмотреть Что Каждый Программист Абсолютно, Положительно Должен Знать О Кодировках И Наборы Символов Для Работы С Текстом и Обработка Unicode Спереди Назад В Веб-Приложении.
старый пост, но вы можете конвертировать UTF-8 в Windows-1252, и вы будете иметь тот же эффект:
$str = "ľaľa ho papľuha, ogrcal mi krpce!"
$str = mb_convert_encoding( $str, "Windows-1252", "UTF-8" );
но если вам действительно нужна Windows-1250, вы можете использовать ЭТО РЕШЕНИЕ и адаптироваться к вашим потребностям.
Я испытал аналогичную проблему. При чтении CSV-файла слово " Česká republika "было прочитано как"Èeská republika".
это решило его для меня:
iconv( "Windows-1250", "UTF-8", ($string));