当遇到某些字符串内容时,strip_tags会过早返回 - 为什么?

时间:2010-11-19 09:37:58

标签: php string

大家, 我确定这是一个功能,而不是一个bug,我忽略了一些明显的东西。但我只是看不到它。

我有以下代码,其中包含HTML,其中包含一些包含在短标记中的PHP内容:

$wtf = <<<WTF
<h1>First header</h1>
<p class="intro">First line of text</p>
<h2>Second header</h2>
<p>Second line of text</p>
<?= showImg ('image.jpg'); ?>
<p>Third line of text</p>
<?= showImg ('image.jpg', ''); ?>
<p>Fourth line of text</p>
<?= showImg ('image.jpg', '', ''); ?>
<p>Fifth line of text</p>
<?= showImg ('image.jpg', '', 'class="content"'); ?>
<p>Sixth line of text</p>
WTF;
echo strip_tags ($wtf);[/CODE]

这输出以下内容:

First header
First line of text
Second header
Second line of text

Third line of text

Fourth line of text

Fifth line of text[/CODE]

如您所见,第六行文字未包含在输出中。罪魁祸首是前一行,

<?= showImg ('image.jpg', '', 'class="content"'); ?>

或者更确切地说,是showImg()调用中的第三个参数。一旦strip_tags()遇到这个部分,它就会退出而不显示错误消息并返回到目前为止处理的文本 - 这使我相信它以某种方式认为遇到了它应该处理的数据的结尾。

为什么?

顺便说一下,      当我运行它时,本身工作正常,即使有完整的错误报告也不会生成与语法相关的警告或错误,因此我认为它是有效且允许的语法。是的,我知道关于使用短标签是否是一个好主意的整个半宗教讨论,但是现在我正在使用它并且我想知道的是为什么strip_tags在它遇到第三个参数时过早地返回showImg()调用。

谷歌,其他论坛以及对StackOverflow的搜索都没有带来启示。 谁能告诉我这里发生了什么?谢谢 - 非常感谢!

// Frank

1 个答案:

答案 0 :(得分:0)

问题与heredoc语法无关;我只是在这个例子中使用过它。问题在于将字符串数据输入到strip_tags中,无论数据是如何获取的,都会发生这种情况 - 从函数返回,使用通常的$ string =“fubar”语法分配给变量,或者其他任何内容。