’
- это то, что вы получаете, когда читаете кодированный символ UTF-8 ’
(ПРАВИЛЬНАЯ ОДНОКВАЖНАЯ КВАРТАЦИЯ, U + 2019), как если бы он был закодирован как windows-1252. Другими словами, у вас есть две проблемы: вы используете неправильную кодировку для чтения неправильного символа.
Значения атрибутов HTML должны быть заключены в апострофы или кавычки ASCII, а не в кавычки. Числовые объекты, которые вы конвертируете, должны быть '
или '
(апостроф) или "
или "
(кавычка). Вместо этого у вас, кажется, есть ’
, который представляет тот же символ, что и ’
, ’
или ’
.
Что касается второй проблемы, то результирующий текст кажется закодированным как UTF-8, но в какой-то момент он читается так, как будто это windows-1252. В UTF-8 символ ’
представлен трехбайтовой последовательностью E2 80 99
, но windows-1252 преобразует каждый байт отдельно, в â
, €
и ™
. Где бы это ни происходило, этого нет в коде, который вы нам показали.
Хорошей новостью является то, что ваш preg_replace
код, кажется, работает правильно. ;) Но я думаю, что другие правы, когда говорят, что вы можете использовать html_entity_decode()
в одиночку для этой части.