2011-09-25 139 views
2

我無法檢測字符串中的撇號(')。我試過如何在使用PHP的字符串中查找撇號?

if (strpos($username, chr(39)) > 0) 
if (strpos($username, '\') > 0) 
if (strpos($username, "'") !== FALSE)) 

沒有運氣。什麼是正確的做法?

+0

請提供一個簡單的測試案例。你的一個解決方案應該已經可以工作你確定它是一個撇號嗎?還有其他字符看起來像撇號。 –

+0

我可以問你爲什麼要在用戶名中搜索'''? –

+0

我不想允許用戶名 - 默認情況下,Drupal允許。當您想要在URL中傳遞用戶名或創建使用用戶名 – MotoTribe

回答

4

單引號是一個特殊字符。因此,如果您想在single quoted string內使用單引號,則必須使用反斜槓\符號來避免單引號。

int singleQuotePosition = strpos($username, '\''); 

OR

int singleQuotePosition = strpos($username, "'"); 

PHP Manual: Strings

+0

bahh .. nope的文件名或目錄時不好。單引號字符串表示該字符串在單引號內。 *嘆*。 –

+0

@yi_H:是的,它是目前的問題範圍混亂,我會編輯鏈接標題我已經提供基本上引用單引號和雙引號字符串 – sll

+0

但這是答案是死**錯**,OP發佈了一個工作方案。 –

4

你上市這一塊,它應該工作:

if (strpos($username, "'") !== FALSE) 
2

又一個隨機猜測:也許你的單引號是不是真的單引號。

如果是這樣,你可能想嘗試mb_strpospreg_match找到該字符的UTF-8的變化:

preg_match("/'/u", $string); 

甚至與/\p{Pi}/u測試,看看它是另一種類型的單引號分身的。


另一個祕訣:不是strpos和布爾結果擺弄,嘗試strstr如果你只是想測試一個字符存在。