2010-01-31 156 views
2

两个这样的:在PHP中,strpos()未能找到双引号( '“')的字符串

echo 'Tok: '.$tok.' Strpos: '.strpos($tok, "\"").' length: '.strlen($tok).'<br>'; 

而且这样的:

echo 'Tok: '.$tok.' Strpos: '.strpos($tok, '"').' length: '.strlen($tok).'<br>'; 

结果在下面的输出:

Tok: "fresh Strpos: length: 11 

strpos完全没有找到双引号,它返回false(我用strpos()检查=== false)。有人能告诉我这里发生了什么吗?我可以找到n o提示strpos无法处理双引号的文档,为什么不能找到它?我不知道该怎么做。

+0

它的工作对我来说在5.3.0 ... – Rifat 2010-01-31 18:26:08

回答

7

您是否千分百确定$tok中的双引号实际上是文字"而不是HTML实体?你能检查你的HTML代码吗?

+0

此。当您回复$ tok时,请检查网页的来源。 – 2010-01-31 18:22:03

+1

刚刚回来发布,我发现了。这是一个HTML实体:" *总台*为失败输入消毒。 – 2010-01-31 18:28:07

+0

在任何时候都完全输入“sanitisation”的失败!只有在将文本放入HTML输出的时刻才能进行HTML编码;在输入阶段做它注定要失败,混乱的数据库内容和其他内容进来的安全漏洞。 – bobince 2010-01-31 18:42:47

2

在命令行使用php,您的代码适用于我。

我注意到你没有指定$ tok的内容。我也注意到它看起来像你输出到浏览器。你确定html

&quot 

是不是被用来代替实际的引用字符吗?

1

由于$ tok中第一个元素是双引号(“),所以strpos($ tok,''')等于=== 0。然后当你打印出0时,你什么都不会得到,因为它是一个布尔值FALSE。

这个函数可以返回布尔 FALSE,但也可以返回 非布尔值,其结果为 FALSE,如0或“”。有关更多 的信息,请参阅 关于布尔值的部分。使用===运营商 测试此 函数的返回值 - http://us3.php.net/strpos

+2

Nah,只有当它是假的输出将是空的;否则它应该是一个数字“0”不应该“? – 2010-01-31 18:27:04