如何在使用PHP的字符串中查找撇号?

问题描述:

我无法检测字符串中的撇号(')。我试过如何在使用PHP的字符串中查找撇号?

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

没有运气。什么是正确的做法?

+0

请提供一个简单的测试案例。你的一个解决方案应该已经可以工作你确定它是一个撇号吗?还有其他字符看起来像撇号。 –

+0

我可以问你为什么要在用户名中搜索'''? –

+0

我不想允许用户名 - 默认情况下,Drupal允许。当您想要在URL中传递用户名或创建使用用户名 – MotoTribe

单引号是一个特殊字符。因此,如果您想在single quoted string内使用单引号,则必须使用反斜杠\符号来避免单引号。

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

OR

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

PHP Manual: Strings

+0

bahh .. nope的文件名或目录时不好。单引号字符串表示该字符串在单引号内。 *叹*。 –

+0

@yi_H:是的,它是目前的问题范围混乱,我会编辑链接标题我已经提供基本上引用单引号和双引号字符串 – sll

+0

但这是答案是死**错**,OP发布了一个工作方案。 –

你上市这一块,它应该工作:

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

又一个随机猜测:也许你的单引号是不是真的单引号。

如果是这样,你可能想尝试mb_strpospreg_match找到该字符的UTF-8的变化:

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

甚至与/\p{Pi}/u测试,看看它是另一种类型的单引号分身的。


另一个秘诀:不是strpos和布尔结果摆弄,尝试strstr如果你只是想测试一个字符存在。