1

我有一个字符串,称为$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
 }
4

2 回答 2

0

在左方括号后键入插入符号会否定字符类,因此您可以执行以下操作:

$check = preg_replace('/[^A-Za-z0-9_-]/', '', $ID);
于 2014-11-29T16:19:21.040 回答
0

您可以使用此替换:

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

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

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

于 2014-11-29T16:52:41.827 回答