2011-04-15 82 views
0

当我取回从这个网站的meta描述标签的报价:http://mashable.com/2011/04/14/google-computers-regret/meta描述编码 - 返回问题引号标志着PHP

字周围的引号“遗憾”回报问号。

我使用下面的代码,而$ 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"); 

我怎样才能解决这个问题?

+0

你想完成什么? – Gumbo 2011-04-15 06:59:38

回答

0

这是一个原始的修复,我相信有这样做的更好的办法,但:

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

这应该用一个简单的引号替换这些程式化引号和防止问号问题。

(快乐地学习更好,更聪明,比这个笨重的一个解决方案。)根据下面的评论

修订:

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

可以更换多种模式(在一个阵列举行)与使用此函数的替换str相同 - 不必填充具有相同内容的数组,或者在不需要时创建笨重的函数。

+0

PHP正在将那些“风格化”的引号解释为我的常规引用,而不是进行替换 – John 2011-04-15 06:35:18

+0

我发现这些引号被称为“卷曲引号”,并且当然是由微软创建的......这是一个替换函数他们:'函数fixcurly($ string){$ search = array(“\ xe2 \ x80 \ x9c”,“\ xe2 \ x80 \ x9d”,“\ xe2 \ x80 \ x98”,“\ xe2 \ x80 \ x99” ); $ replace = array(''',''',''“,”'“); return str_replace($ search,$ replace,$ string); }' – John 2011-04-15 06:45:45

0

将生成的HTML输出为UTF-8。