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 &quot;Windows-1250&quot; ( 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));