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