【问题标题】:Blocking special characters from being entered as input in PHP阻止在 PHP 中输​​入特殊字符作为输入
【发布时间】:2013-11-20 14:44:18
【问题描述】:

如何阻止字段中使用的特殊字符?如果有人在该字段中键入了一个特殊字符,则应在一侧弹出一条消息,说“您不能使用它”。

这是我一直在显示错误的那种格式:

if (empty($_POST["firstname"]))
{
    $errors['firstname'] = "Please Enter Your First Name";
}
elseif(strpos($_POST['firstname'], '/') !== false)
{
    $errors['firstname'] = 'Cannot use /';
}

如您所见,我在/ 中输入了一个错误,但所有特殊字符都需要它。

【问题讨论】:

  • 您可以使用正则表达式检查输入是否有效,demo

标签: php character special-characters


【解决方案1】:

我会使用一个去除所有非法字符并将其与原始字符串进行比较的正则表达式。如果不相同,则使用了非法字符。

类似:

$new_value = preg_replace("/[^\w]+/", "", $value);
if ($new_value !== $value)
{
   // illegal characters were used
}

请注意,我使用的是否定字符类,在这种情况下只允许单词字符并将所有非单词字符替换为空。

【讨论】:

  • 我会把这个放在哪里?
  • @user2965175 你现在有它,$value 将是你的POST 变量。
  • @user2965175 不客气。如果对您有用,请不要忘记将任何答案标记为已接受。
【解决方案2】:

可以在正则表达式中生成无效字符列表。在下文中,我“不允许”问号和正斜杠。

<?php
$_POST['firstname'] = "Sam?uel/";

if (empty($_POST["firstname"])){

    $errors['firstname'] = "Please Enter Your First Name";

}elseif(preg_match_all("/[(?\/)]/i",$_POST['firstname'],$matches)){ // list of invalid characters

    #echo '<pre>',print_r($matches),'</pre>';
    $invalid_characters = implode(",",$matches[0]);
    $errors['firstname'] = 'Cannot use '.$invalid_characters;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多