Набор символов utf-8, 7-битная кодировка, PHP добавляет странные символы
Извините, мой титул не лучше, но я даже не уверен, как классифицировать эту проблему. Я знаю, что это связано с кодированием, но я не уверен, как.
Я делаю проект для ESP. Их электронные письма 7-битные, с набором символов utf-8 (что на самом деле не имеет смысла для меня).
Выставка:
Я получаю html текст письма через API. Затем я использую PHP для изменения некоторого текста (через str_replace), а затем публикую новый html через API.
Все в порядке, за исключением того, что каждый раз, когда я публикую сообщение, я получаю некоторые странные символы, т.е. каждый раз, когда я запускаю код, он добавляет еще один забавный символ.
Вот затронутый раздел электронного письма, прежде чем я внесу какие-либо изменения (это в режиме "просмотра", то есть как браузер будет это видеть):
Вот код, который производит этот символ авторского права И А с "острым" символом над ним:
© 2012 H
Что странно, так это то, что единственный способ избавиться от этой буквы А с "острым" символом над ней - это удалить символ авторского права... каким-то образом они связаны между собой.
Каждый раз, когда я отправляю сообщение в API через PHP, я получаю новые забавные символы, таким образом:
1-й пост:
2-й пост:
3-й пост:
Это так странно... это единственная часть, которая не работает! Пожалуйста, помогите... это сводит меня с ума!:-)
РЕДАКТИРОВАТЬ:
Вот соответствующий PHP:
Получите html из ответа xml:
$ html = (строка)$data;
Заменить некоторые вещи:
$ newHTML = str_replace ($ oldExpiresString, $ newExpiresString, $ html);
Поместите новый HTML в переменные поста xml:
$ input = ''. $ newHTML. '';
URLEncode это:
$ formatted = urlencode ($ input);
Опубликовать через curl:
$ postVariables = array ('type' => urlencode ($ type), 'activity' => urlencode ($ activity), 'input' => urlencode ($ input));
$ rawResponseString = post_url ($ urlBase, $ postVariables); print $ rawResponseString;
1 ответ
Чтобы уточнить мой комментарий:
$screwed = '©';
echo html_entity_decode($screwed, ENT_COMPAT, 'ISO-8859-1');
Это возвращает "©", расшифровывая испорченную многобайтовую HTML-кодировку обратно в кодированный код UTF-8. Отсюда вам просто нужно обработать текст, как если бы он был в кодировке UTF-8 (что и происходит сейчас).