кодирование мета-описания - кавычки возвращаются как вопросительные знаки PHP - PullRequest
0 голосов
/ 15 апреля 2011

Когда я получаю цитаты из мета-тега описания этого сайта: http://mashable.com/2011/04/14/google-computers-regret/

Цитаты вокруг слова «сожаление» возвращаются в виде вопросительных знаков.

Я использую следующий код, тогда как $ str - это возвращенные метаданные:

if(mb_detect_encoding($str, 'UTF-8, ISO-8859-1', true) != 'ISO-8859-1') $str = utf8_decode($str); 
$str = strtr($str, get_html_translation_table(HTML_ENTITIES)); 
$str = strip_tags(html_entity_decode(htmlspecialchars_decode($str,  ENT_NOQUOTES), ENT_NOQUOTES, "UTF-8"));
$str = html_entity_decode($str, ENT_QUOTES,"UTF-8");

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Выведите ваш полученный HTML как UTF-8.

0 голосов
/ 15 апреля 2011

Это примитивное исправление, и я уверен, что есть лучший способ сделать это, но:

$str = str_replace( array( "“" , "”" ) , '"' , $str );

Это должно заменить эти стилизованные кавычки простой кавычкой и предотвратить проблему с вопросительным знаком.

(Рад узнать более лучшие, более умные решения, чем этот неуклюжий.)

Пересмотрено на основе комментариев ниже:

$str = str_replace( array("\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x98", "\xe2\x80\x99") , '"' , $str );

Вы можете заменить несколько шаблонов.(хранится в массиве) с той же строкой замены, использующей эту функцию - лучше, чем заполнять массив с тем же содержимым или создавать неуклюжую функцию, когда она не нужна.

...