我用Google搜索并搜索了所有内容,但我无法回答。
为什么下面的PHP代码允许加号:
$aValid = array('-', '_', '.');
if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){
(如果用户键入1234+,就像它有效吗????)。
我通常会找到旁路,但这是非常必要的;
$aValid = array('-', '_', '.');
if (ctype_alnum(str_replace($aValid, '', (htmlentities ( trim ( $_POST['Rusername'] ) , ENT_NOQUOTES ))))){
echo "+ ok";
}else{
echo "+ not ok";
}
我想使用这种验证,只需在需要时为$ aValid添加特殊字符。
在插入MySQL之前,我会做mysql_real_escape_string或预备语句。
为第一段代码添加+符号的任何想法。在我看来,它真的不应该。
最新更新 - 我需要几个小时的低级调试HTTP标头,以确定我的A端更改了Content-Type,以便+符号在到达PHP if子句之前变为空格(在我的白名单中) ......
什么 - 我希望永远不会发生在你身上 - 体验:)。
提醒自己:如果jQuery是这个验证过程中的主要参与者,应该提到jQuery ......
答案 0 :(得分:2)
您应该做的是检查流程的每个阶段,而不是将它们全部关闭到一行:
$name = $_POST['Rusername'];
var_dump($name);
$name = str_replace($aValid, '', $name);
var_dump($name);
等...基本调试。如果您在声明中有多个阶段,那么请检查每个阶段。 ctype可能工作得很好,但str_replace让你以某种方式失败。
答案 1 :(得分:0)
为第一段代码添加+符号的任何想法。在我看来,它真的不应该。
不行......第一段代码返回false ..
如果您要删除+
符号,则必须将其添加到$aValid
变量中