Регулярное выражение для запрета специальных норвежских букв в дружественном URL - modx

Я разрабатываю страницу, используя modx Revolution. Это полноценная cms с множеством встроенных функций. Если я создам страницу в менеджере, она автоматически создаст для меня удобный URL-адрес, указывающий на эту страницу.

Проблема в том, что это не отрицает специальные символы, которые есть у нас в Норвегии, æøå (и заглавные ÆØÅ).

В системе есть встроенный шаблон регулярного выражения для удаления большинства плохих символов из URL-адреса, но мне также нужно выражение для удаления æøå и ÆØÅ.

Шаблон выглядит следующим образом:

/[\0\x0B\t\n\r\f\a&=+%#<>"~:`@\?\[\]\{\}\|\^'\\]/

Может ли кто-нибудь использовать свои волшебные знания регулярных выражений, чтобы включить эти 6 букв? Я полностью зеленый в регулярных выражениях, и простое добавление букв туда, похоже, не сработало.

PS: Пожалуйста, не используйте здесь обычное «бу, не используйте для этого регулярное выражение». У шаблона есть причина, и я не хочу возиться с ядром, если нам нужно обновить modx (что, скорее всего, произойдет рано или поздно).


person OptimusCrime    schedule 05.12.2011    source источник
comment
Поскольку modx написан на php, я добавил тег php.   -  person stema    schedule 05.12.2011


Ответы (2)


Попробуйте использовать Юникод. Я не знаю modx, но, поскольку он написан на php, я надеюсь, что он использует регулярные выражения php preg.

/[\0\x0B\t\n\r\f\a&=+%#<>"~:`@\?\[\]\{\}\|\^'\\\x{00C6}\x{00E6}\x{00C5}\x{00E5}\x{00D8}\x{00F8}]/u

Модификатор u говорит php использовать режим сопоставления юникода, затем он интерпретирует регулярное выражение как строку юникода.

\x{00C6} — это символ Юникода Æ

Пожалуйста, проверьте код других символов самостоятельно, чтобы убедиться, что я не ошибся при их поиске.

См. regular-expression.info для использования Unicode в php.

Unicode.org для кодовой точки

person stema    schedule 05.12.2011

На самом деле MODX имеет системную настройку, в которой вы можете определить собственный класс транслитерации: http://rtfm.modx.com/display/revolution20/friendly_alias_translit_class

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

http://modx.com/extras/package/translit

person okyanet    schedule 12.12.2011