Я пытаюсь просмотреть последнюю запись из 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-объекты.
Я предполагаю следующее:
Причиной этого является то, что ваш символ 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 году.