Это иногда случается, когда строка преобразуется из Windows-1252 в UTF-8 дважды .
У нас это было в приложении Zend / PHP / MySQL, где такие символы появлялись в базе данных, вероятно, из-за подключения MySQL, не задающего правильный набор символов. Нам пришлось:
UPDATE MyTable SET
MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
Сделайте это для того, чтобы сколько угодно таблиц / столбцов. Вы также можете исправить некоторые из этих строк в PHP, если это необходимо. Обратите внимание, что поскольку символы были закодированы дважды , нам действительно нужно сделать обратное преобразование из UTF-8 обратно в Windows-1252, что сначала смутило меня.
mb_convert_encoding('’', 'Windows-1252', 'UTF-8'); // returns ’