检查字符串中的高 ascii、标点符号和其他奇怪的字符


Check string for high ascii, punctuation, other weird characters

我有一个名为$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
 }

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

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

您可以使用此替换:

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

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

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