Набор символов utf-8, 7-битная кодировка, PHP добавляет странные символы

Извините, мой титул не лучше, но я даже не уверен, как классифицировать эту проблему. Я знаю, что это связано с кодированием, но я не уверен, как.

Я делаю проект для ESP. Их электронные письма 7-битные, с набором символов utf-8 (что на самом деле не имеет смысла для меня).

Выставка:

настройки кодирования

Я получаю html текст письма через API. Затем я использую PHP для изменения некоторого текста (через str_replace), а затем публикую новый html через API.

Все в порядке, за исключением того, что каждый раз, когда я публикую сообщение, я получаю некоторые странные символы, т.е. каждый раз, когда я запускаю код, он добавляет еще один забавный символ.

Вот затронутый раздел электронного письма, прежде чем я внесу какие-либо изменения (это в режиме "просмотра", то есть как браузер будет это видеть):

Начните

Вот код, который производит этот символ авторского права И А с "острым" символом над ним:

                            © 2012 H

Что странно, так это то, что единственный способ избавиться от этой буквы А с "острым" символом над ней - это удалить символ авторского права... каким-то образом они связаны между собой.

Каждый раз, когда я отправляю сообщение в API через PHP, я получаю новые забавные символы, таким образом:

1-й пост:

2-й пост:

3-й пост:

Это так странно... это единственная часть, которая не работает! Пожалуйста, помогите... это сводит меня с ума!:-)

РЕДАКТИРОВАТЬ:

Вот соответствующий PHP:

  1. Получите html из ответа xml:

    $ html = (строка)$data;

  2. Заменить некоторые вещи:

    $ newHTML = str_replace ($ oldExpiresString, $ newExpiresString, $ html);

  3. Поместите новый HTML в переменные поста xml:

    $ input = ''. $ newHTML. '';

  4. URLEncode это:

    $ formatted = urlencode ($ input);

  5. Опубликовать через 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 (что и происходит сейчас).

Другие вопросы по тегам