Проверьте строку на предмет высокого ascii, пунктуации, других странных символов

У меня есть строка под названием $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
}

1

Решение

Ввод каретки после открывающей квадратной скобки отменяет класс персонажа, поэтому вы можете сделать:

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

Другие решения

Вы можете использовать эту замену:

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

[:word:] Класс символов содержит буквы, цифры и подчеркивание.

Чтобы сделать строку строчной, используйте strtolower()

0

По вопросам рекламы [email protected]