Как и все отладки, вы начинаете с изоляции проблемы:
Я очищаю список RSS-каналов с помощью cURL, - посмотрите на XML-файл из RSS-канала, который вызывает проблему (существует более одного канала, поэтому некоторые каналы могут быть правильными и для каналов, которые являются неправильными, чтобы быть неправильным по-разному)
и затем я читаю и анализирую данные RSS с помощью SimpleXML. - распечатываю поле, которое читает SimpleXML, - это нормально или проблема обнаруживается?
Затем отсортированные данные вставляются в базу данных MySQL. - распечатывает шестнадцатеричное (поле), длину (поле) и char_length (поле) для фрагмента данных, который создает проблему.
EDIT
Возьмите корм http://hangout.altsounds.com/external.php?type=RSS2, поместите его в валидатор http://validator.w3.org/feed/. Они объявляют свой тип контента как iso-8859-1, но часть реального контента, такого как кавычки, находится в чем-то вроде cp1252 - например, они используют байт 0x93 для представления левой цитаты - http://www.fileformat.info/info/unicode/char/201C/charset_support.htm.
Что раздражает в этом, так это то, что это не отображается в некоторых инструментах - Firefox, похоже, догадывается, что происходит, и правильно отображает кавычки, а главное, SimpleXML преобразует 0x93 в utf8, поэтому получается 0xc293, что усугубляет проблему.
РЕДАКТИРОВАТЬ 2
Обходное решение для более точного чтения этого канала - заменить «ISO-8859-1» на «Windows-1252» перед переходом на Simple XML. Это не будет работать на 100%, потому что оказывается, что некоторые части подачи находятся в UTF8.
Общий подход, предполагающий, что вы не можете заставить всех в мире корректировать свои каналы, состоит в том, чтобы изолировать любые обходные пути, которые вам требуются, для взаимодействия с внешней системой, излучающей искаженные данные, и передать в чистом виде utf8 в центр вашей системы. Сохраните датированную копию необработанного внешнего канала, чтобы в будущем вы могли вспомнить, почему был необходим обходной путь, отделить и прокомментировать строки кода, которые реализуют обходной путь, чтобы было легко найти и изменить, если и когда внешняя организация исправит свой канал ( или ломает его по-другому), и проверяйте это время от времени. К сожалению, вместо программирования спецификации вы программируете текущее состояние ошибки, поэтому нет постоянного, чистого решения - лучшее, что вы можете сделать, это изолировать, документировать и контролировать.