2010-01-31 153 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