我一直在尝试使用带有"/^[a-zA-Z0-9_-]+$/"
的preg_match来确保给定的字符串只包含那里的字符而没有别的,但它似乎没有正确计算$以便它一直匹配到行的末尾,但它确实需要使用^。
如果我使用{3,}
代替+
:"/^[a-zA-Z0-9_-]{3,}$/"
这是我最初的方式,我可以写3个字母/数字, - 或_然后除了以外的任何字符那些,它会被视为一场比赛。
代码:
if(preg_match("/^[a-zA-Z0-9_-]+$/", $value, $arr) && strlen($value) > 3)
{
echo $good .' Ok';
}
else
{
echo $bad .' Invalid username. (letters & numbers only)';
}
使用类似下面的内容作为$ value,它告诉我它应该是因为空格或&而出现无效的用户名。字符。
单词
字&安培;字
事实证明,这是因为价值是通过$ _GET发送到页面的,而“word& word”这样的$ value代之以“word”而不是......有没有办法解决这个问题?
答案 0 :(得分:2)
事实证明,这是因为价值是通过$ _GET发送到页面的,而“word& word”这样的$ value代之以“word”而不是......有没有办法解决这个问题?
我在这里疯狂地猜测,您从浏览器调用http://yoursite/page.php?something=word&word的PHP页面正在读取$_GET['something']
而不是预期的word
word&word
。
嗯,这是因为文字符号符号被视为$ _GET参数分隔符,并且您要包含在参数值中的任何符号符号必须按%26
进行网址编码,如http://yoursite/page.php?something=word%26word中所示。在PHP中,您可以使用函数urlencode()
对字符串值进行编码:
$url = 'http://yoursite/page.php?something=' . urlencode('word&word');
答案 1 :(得分:0)
事实证明这是因为 值被发送到页面 通过$ _GET和$值的东西 如“word& word”出现为“word” 相反......有没有办法解决这个问题?
您需要在网址中对&符号进行编码:
[网址] /script.php?string=word&word
变为
[网址] /script.php?string=word&word
如果链接是由PHP生成的,请尝试使用urlencode。
修改或尝试使用_POST。