[a-z] будет когда-либо соответствовать символам с диакритикой в PREG/PCRE?

Я уже знаю это \w в PCRE (особенно реализация PHP) может иногда соответствовать некоторым символам неASCII в зависимости от локали системы, но что относительно [a-z]?

Я не думал бы так, но я заметил эти строки в одном из базовых файлов Drupal (includes/theme.inc, упрощенный):

// To avoid illegal characters in the class,
// we're removing everything disallowed. We are not using 'a-z' as that might leave
// in certain international characters (e.g. German umlauts).
$body_classes[] = preg_replace('![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s', '', $class);

Это верное, или сделало кого-то, просто добираются [a-z] перепутанный с \w?

17
задан Garrett Albright 18 December 2009 в 21:32
поделиться

1 ответ

Короче говоря: возможно, это зависит от системы, в которой развернуто приложение, зависит от того, как был скомпилирован PHP, добро пожаловать в CF по локализации и интернационализации.

Базовый механизм PCRE принимает во внимание региональный стандарт при определении значения «az». В языковом стандарте, основанном на испанском, ñ будет пойман az). Семантическое значение az - «все буквы между a и z, а ñ - это отдельная буква на испанском языке».

Однако способ, которым PHP слепо обрабатывает строки как наборы байтов, а не набор кодовых точек UTF, означает, что у вас есть ситуация, когда az МОЖЕТ соответствовать символу с диакритическими знаками . Учитывая разнообразие различных систем, в которых развертывается Drupal, имеет смысл, что они предпочтут четко указать разрешенные символы, а не просто доверять az, чтобы он поступал правильно.

Я ' d также предполагают, что существование этого регулярного выражения является результатом отправки отчета об ошибке о том, что немецкие умляуты не фильтруются.

Обновление 2014 г. : Согласно ответ JimmiTh ниже , похоже, (несмотря на некоторую документацию, "запутывающую разработчиков, не связанных с pcre-core"), что [az] будет соответствовать только символам abcdefghijklmnopqrstuvwxyz , что является пресловутым в 99% случаев. Тем не менее, разработчики фреймворков, как правило, нервничают по поводу неопределенности в своем коде, особенно когда код опирается на системы (строки, специфичные для локали), которые PHP не обрабатывает так изящно, как хотелось бы, и серверы, над которыми разработчики не могут контролировать. Хотя комментарии анонимного разработчика Drupal неверны - дело не в "

13
ответ дан 30 November 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: