PHP: обнаружение недопустимых символов в тексте

Asked
Viewd2170

0

Я хотел бы анализировать вводимые пользователем данные с помощью PHP. Мне нужна функция, которая сообщает мне, есть ли в тексте недопустимые символы или нет. Мой черновик выглядит следующим образом:

 <?php
function contains_invalid_characters($text) {
    for ($i = 0; $i < 3; $i++) {
        $text = html_entity_decode($text); // decode html entities
    } // loop is used for repeatedly html encoded entities
    $found = preg_match(...);
    return $found;
}
?>
 

Функция должна возвращать ИСТИНА, если введенный текст содержит недопустимые символы, и ЛОЖЬ, если нет. Допустимые символы должны быть:

a-z, A-Z, 0-9, äöüß, пробел, "! § $% & / () = [] \?.:,; -_

Подскажите, как это кодировать? Подходит ли для этого preg_match ()? Также важно, чтобы я мог легко расширить функцию позже, чтобы она включала другие символы.

Надеюсь, вы мне поможете. Заранее спасибо!

1 ответов

3

Для этого можно использовать регулярное выражение:

 function contains_invalid_characters($text) {
    return (bool) preg_match('/[a-zA-Z0-9äöüß "!§$%&\/()=[\]\?.:,;\-_]/u', $text);
}
 

Но учтите, что вам нужно закодировать этот код с той же кодировкой, что и текст, который вы хотите протестировать. Я рекомендую вам использовать для этого UTF-8.

  • Разве этот класс символов не должен быть отменен? то есть, ‘/ [^ a-zA-Zetc.

    Alan Moore16 июня 2009, 02:05
  • / и ] нужно было экранировать.

    Gumbo12 июня 2009, 18:13
  • Вы можете конвертировать между кодировками. См., Например, utf8_encode или mb_convert_encoding.

    Gumbo13 июня 2009, 10:40
  • Но разве нет возможности их закодировать? Поскольку я получаю сообщение об ошибке, моя кодировка не может быть UTF-8. Что делать?

    caw13 июня 2009, 10:38
  • Думаю, у меня есть решение: сначала выполните utf8_decode (). Затем используйте preg_match (), так как нет функции mb_preg_match () для поддержки многобайтовых значений. Наконец, используйте utf8_encode (). Это должно быть Йорк !?

    caw14 июня 2009, 00:12
  • Я хотел преобразовать объявление строки, определяющее регулярное выражение. Но было бы лучше, если бы вы просто конвертировали весь файл и использовали UTF-8.

    Gumbo13 июня 2009, 19:13
  • Хорошо, тогда мой файл нельзя закодировать в UTF-8. Но чтобы избежать этого сообщения об ошибке, я могу просто заменить умляуты в моем тексте раньше, чтобы я мог удалить их из своего шаблона. Большое спасибо!

    caw12 июня 2009, 19:58
  • Я использую UTF-8. Я не могу заменить узор на «Ã¤Ã¶Ã¼ÃŸ»?

    caw12 июня 2009, 19:20
  • Спасибо! К сожалению, для большого количества символов он возвращает ошибку «Неизвестный модификатор». Сначала ошибка появляется только для «(», но когда я убираю «(», она появляется и для других символов. Могу ли я избежать их, чтобы это работало?

    caw12 июня 2009, 18:07
  • Когда вы используете UTF-8 для кодирования этого файла, ошибок быть не должно. Эта ошибка возникает только в том случае, если ваш файл не имеет кодировки UTF-8.

    Gumbo12 июня 2009, 19:30
  • Я не хочу преобразовывать текст, поскольку он уже имеет правильную кодировку. Значит, я должен закодировать регулярное выражение? Но / [a-zA-Z0-9äöüß «! § $% & \ / () = [] \?.:,; -_] / не работает, не так ли?

    caw13 июня 2009, 18:36
  • Спасибо! Теперь я получаю сообщение «Ошибка компиляции: недопустимая строка UTF-8 со смещением 11». Это должно быть из-за «äöüß», не так ли? Как я могу закодировать эти символы?

    caw12 июня 2009, 18:16