检查字符串是否有高ascii,标点符号,其他奇怪的字符

时间:2014-11-29 16:15:35

标签: php string preg-replace ascii asciiencoding

我有一个名为$ID的字符串来自另一个页面并点击base64_decode($enc);并希望检查它是否有任何奇怪的字符。解密时$ID应仅包含字母,数字,下划线和短划线。

我已经看了preg_replace('/[\x80-\xFF]/', '', $string);,它删除了一些奇怪的字符---这很有帮助---但我仍然可以看到@符号和括号和东西仍然可以使用

有没有办法可以降低ascii测试?或者除了字母,数字,下划线和短划线之外我还能怎样切除所有内容?

任何指导我正确方向的帮助都很棒,谢谢!

$enc = $_GET["key"];
$ID= base64_decode($enc);

if (empty($enc)) { echo "key is empty"; } else {

    echo "string ok<br>"; 

    $check = preg_replace('/[\x80-\xFF]/', '', $ID);
    echo $check;
    // i can see this step is helping cut junk out, do more tests from here
 }

2 个答案:

答案 0 :(得分:0)

在开始方括号后键入插入符号会使字符类无效,因此您可以执行以下操作:

$check = preg_replace('/[^A-Za-z0-9_-]/', '', $ID);

答案 1 :(得分:0)

您可以使用此替代品:

$check = preg_replace('~[^[:word:]-]+~', '', $ID);

[:word:]字符类包含字母,数字和下划线。

要使字符串小写,请使用strtolower()