2011-11-04 137 views
1

所以我使用substr来限制我显示的新闻文章的多少。这里是代码:substr()奇怪的输出。这是什么原因造成的?

substr(strip_tags($news['content']),0,$content_length) . '...'; 

这个问题只发生在一个蓝色的月亮..当它试图切断撇号附近。我得到以下输出Hoye&#...在这种情况下,$news['content']"Hoye's Pharmacy will be closed....."。在这种情况下,$content_length的值恰好为8.有人建议尝试mb_substr,但这并没有解决问题。

+0

你如何确认字符串是'Hoye's'?在我看来,它是'Hoye  s'而不是(或类似的东西)。请检查原始输出,而不是通过浏览器过滤输出。 – deceze

+0

是的,我认为这可能是发生了什么..嗯解决方案? – Roeland

+0

请参阅:[Wordwrap/Cut Text in HTML string](http://stackoverflow.com/a/8494901/367456) – hakre

回答

3

看起来像内容包含编码的HTML字符实体,并且您的子字符串恰好在其中一个字符串的中间切断字符串。

例如

$string = "Hello & Goodbye"; 
$broken = substr($string, 0,7); // Hello &a 

,如果你在浏览器中查看完整的字符串,它会编码的实体转化为它的“显示器”的版本,所以你会看到真正的性格,但一旦你一半与SUBSTR砍它,你会得到部分& #xxx部分,因为它不能被翻译。

+0

建议解决方法:寻找位置后的下一个空格,然后在那里打印。 – Hamish

+0

那我该怎么做呢? – Roeland

+2

你可以解码字符串('html_entity_decode()'),所以只有'real'字符在那里,然后使用'mb_substr()',所以它不会把'unicode'字符分割为substr()' 。但是这可能会破坏代码,使得代码不再存在。 –

相关问题