strip_tags和html_entity_decode组合没有按预期工作

时间:2015-12-29 11:39:14

标签: php html

我从昨天起就一直在与这个问题作斗争 - 不幸的是无济于事(并非完全没有,我找到了某种解决方法),经过一些研究和重读文档后,我仍然很少傻眼了,迷茫了。

我们假设有一个丑陋的字符串,它已经具有正确的html编码的特殊字符。像这样:

$exampleString = '<div id="dynamic2"> <div
id="iStoreProductLongDescription" class="iStoreBox">
<div class="iStoreBoxWrapper"> <div 
class="iStoreBoxContent"> <p style="text-
align:justify;"> </p> <p style="text-
align:justify;"><span style="font-
size:large;"><span> Just a bunch of text here, at 
the end. yedyedyed';

现在我想把这个字符串输出为一个简单干净的字符串,所以首先我需要将它转换为html标签,然后剥离标签。所以我猜以下链应该有效:

$result = strip_tags(htmlspecialchars_decode($exampleString));

但它没有,在网络源中产生echo $的输出是:

<div id="dynamic2"> <div id="iStoreProductLongDescription" class="iStoreBox"> <div class="iStoreBoxWrapper"> <div class="iStoreBoxContent"> <p style="text-align:justify;"> </p> <p style="text-align:justify;"><span style="font-size:large;"><span> Just a bunch o text here, at the end. yedyedyed

在用户输出中,html标签可见并保持不变。但是,当我做这样的事情时:

$result = strip_tags(html_entity_decode(htmlspecialchars_decode($exampleString)));

然后它就像一个魅力,并向用户输出所需的字符串,同样在网络源中:

  

最后,这里只是一堆文字。 yedyedyed

问题在于 - 为什么没有

strip_tags(htmlspecialchars_decode($exampleString));

工作(我认为)它应该工作? 任何见解都非常赞赏。

干杯

2 个答案:

答案 0 :(得分:3)

如果你仔细观察,你会看到你有

<并且它不是<

所以,你首先htmlspecialchars_decode转换

<<

肯定是一个特殊的实体,以后可以通过第二轮htmlspecialchars_decode(或html_entity_decode)到<进行解码,但不会被strip_tags删除。< / p>

答案 1 :(得分:2)

尝试这样:

<?
if($sss_article_featuretitle==""){?>
    <?php echo mb_strimwidth(the_title(), 0, 40, '...'); ?>
<?php } else { //line 81
    echo $sss_article_featuretitle;
}
?>

结果应为:

$exampleString = '&amp;lt;div id="dynamic2"&amp;gt; &amp;lt;div
id="iStoreProductLongDescription" class="iStoreBox"&amp;gt;
&amp;lt;div class="iStoreBoxWrapper"&amp;gt; &amp;lt;div 
class="iStoreBoxContent"&amp;gt; &amp;lt;p style="text-
align:justify;"&amp;gt; &amp;lt;/p&amp;gt; &amp;lt;p style="text-
align:justify;"&amp;gt;&amp;lt;span style="font-
size:large;"&amp;gt;&amp;lt;span&amp;gt; Just a bunch of text here, at 
the end. yedyedyed';

$result = htmlspecialchars_decode($exampleString); // this will decode the entities
echo $result;

html_entity_decode()之后:

<div id="dynamic2"> <div
id="iStoreProductLongDescription" class="iStoreBox">
<div class="iStoreBoxWrapper"> <div 
class="iStoreBoxContent"> <p style="text-
align:justify;"> </p> <p style="text-
align:justify;"><span style="font-
size:large;"><span> Just a bunch of text here, at 
the end. yedyedyed

结果应该是(使用html标签):

$result = html_entity_decode($result); // this will print with HTML
echo $result;

在strip_tags()之后:

 Just a bunch of text here, at 
the end. yedyedyed

结果应该是(没有html标签):

$result = strip_tags($result); // this will strip your html tags
$echo $result;