0

我已经用谷歌搜索并搜索了 SO 和所有内容,但我无法得到答案。

为什么下面的 PHP 代码让加号通过:

$aValid = array('-', '_', '.');

if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){

(如果用户输入 1234+,它会像 vas 一样有效????)。

我,通常,找到了一个旁路,但它真的有必要吗?

$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 在这个验证过程中扮演着如此重要的角色,那么应该提到它......

4

2 回答 2

2

你应该做的是检查过程的每个阶段,而不是把它们全部放在一行中:

$name = $_POST['Rusername'];
var_dump($name);
$name = str_replace($aValid, '', $name);
var_dump($name);

等等... 基本调试。如果您在一个语句中有多个阶段,请检查每个单独的阶段。ctype 可能工作得很好,但 str_replace 不知何故让你失望了。

于 2011-10-17T16:00:12.700 回答
0

为什么 + 符号适用于第一段代码的任何想法。在我看来,真的不应该。

不行...第一段代码返回false..

如果要删除+符号,则必须将其添加到$aValid变量中

于 2011-10-17T16:06:51.787 回答