Я уже знаю это \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
?
Короче говоря: возможно, это зависит от системы, в которой развернуто приложение, зависит от того, как был скомпилирован PHP, добро пожаловать в CF по локализации и интернационализации.
Базовый механизм PCRE принимает во внимание региональный стандарт при определении значения «az». В языковом стандарте, основанном на испанском, ñ будет пойман az). Семантическое значение az - «все буквы между a и z, а ñ - это отдельная буква на испанском языке».
Однако способ, которым PHP слепо обрабатывает строки как наборы байтов, а не набор кодовых точек UTF, означает, что у вас есть ситуация, когда az МОЖЕТ соответствовать символу с диакритическими знаками . Учитывая разнообразие различных систем, в которых развертывается Drupal, имеет смысл, что они предпочтут четко указать разрешенные символы, а не просто доверять az, чтобы он поступал правильно.
Я ' d также предполагают, что существование этого регулярного выражения является результатом отправки отчета об ошибке о том, что немецкие умляуты не фильтруются.
Обновление 2014 г. : Согласно ответ JimmiTh ниже , похоже, (несмотря на некоторую документацию, "запутывающую разработчиков, не связанных с pcre-core"), что [az]
будет соответствовать только символам abcdefghijklmnopqrstuvwxyz
, что является пресловутым в 99% случаев. Тем не менее, разработчики фреймворков, как правило, нервничают по поводу неопределенности в своем коде, особенно когда код опирается на системы (строки, специфичные для локали), которые PHP не обрабатывает так изящно, как хотелось бы, и серверы, над которыми разработчики не могут контролировать. Хотя комментарии анонимного разработчика Drupal неверны - дело не в "