utf-8 для проблемы кодирования iso-8859-1

Я пытаюсь просмотреть последнюю запись из RSS-канала на другом веб-сайте. Канал кодируется UTF-8, а веб-сайт кодируется ISO-8859-1. При отображении названия я использую;

$post_title = 'Blogging – does it pay the bills?'; echo mb_convert_encoding($post_title, 'iso-8859-1','utf-8'); // returns: Blogging ? does it pay the bills? // expected: Blogging - does it pay the bills? 

Обратите внимание, что дефис, который я ожидаю, не является обычным знаком минус, а какой-то большой uber-тире. Ну, в любом случае, на несколько пикселей. 🙂 Не уверен, как еще описать это, поскольку моя клавиатура не может создать этот символ …

Я подозреваю, что вы имеете в виду Em Dash (-). ISO-8859-1 не включает этот символ, поэтому вам не удастся преобразовать его в эту кодировку.

Вы можете использовать htmlentities () , но я бы предложил перейти от ISO-8859-1 к UTF-8 для публикации.

mb_convert_encoding только преобразует внутреннее кодирование – на самом деле он не будет изменять последовательности байтов для символов от одного набора символов к другому. Для этого вам нужен значок .

 mb_internal_encoding( 'UTF-8' ); ini_set( 'default_charset', 'ISO-8859-1' ); $post_title = 'Blogging — does it pay the bills?'; // I used the actual m-dash here to best mimic your scenario echo iconv( 'UTF-8', 'ISO-8859-1//TRANSLIT', $post_title ); 

Или, как говорили другие, просто преобразуйте символы вне диапазона в html-объекты.

Я предполагаю следующее:

  • Ваш файл фактически закодирован с помощью UTF-8
  • Ваш редактор интерпретирует файл с помощью Windows-1252

Причиной этого является то, что ваш символ EM DASH (U + 2014) представлен – . Это именно то, что вы получаете, когда интерпретируете кодовое слово UTF-8 этого символа (0xE28094) с Windows-1252 (0xE2 = â , 0x80 = , 0x94 = ). Поэтому вам сначала нужно исправить кодировку редактора.

И причина для ? в вашем выводе указано, что ISO 8859-1 не содержит символ EM DASH .

Вероятно, это em emash (U + 2014), и то, что вы пытаетесь сделать, это не преобразование кодировки, потому что дефис – это другой символ. Другими словами, вы хотите найти такие символы и заменить их вручную.

Еще лучше, просто переключите сайт на UTF-8. Он во многом совпадает с латинским-1 и более подходит для веб-сайта в 2009 году.