Как мне получить% 20 ​​из URL в регулярном выражении для .htaccess? - PullRequest
1 голос
/ 19 июля 2011

Я пытаюсь получить строку типа product/bob, которая работает, но product/my%20first%20product нет.

Вот мое регулярное выражение:

^product/([A-Za-z_\-\s\%20]+)$

Любые идеи, что яделаешь неправильно?

Ответы [ 2 ]

3 голосов
/ 19 июля 2011

То, что вы написали как свое регулярное выражение, содержит в коллекции несколько вещей, которые могут не соответствовать вашим ожиданиям, в зависимости от используемого механизма регулярных выражений.\s: это может соответствовать \ или s, а не пробел или табуляция.\%20: может соответствовать \, а также %, 2 и 0.Во всяком случае, вы хотите соответствовать %20 по порядку.Это означает, что вы должны использовать ветку.И если вы поставите - в начале или в конце, вам не нужно избегать его.

^product/((?:[A-Za-z_ -]|%20)+)$

((?:...) - это группа без захвата, которая более эффективна, чем захватgroup (...).)

Однако я думаю, что вполне возможно, что то, что вы используете, превращает %20 в символ пробела, и поэтому вы можете просто превратить \s в пробел и избавьтесь от \%20:

^product/([A-Za-z _-]+)$

Также подумайте, следует ли вам разрешить больше символов - для себя я бы использовал ^product/(.*)$ или ^product/([^/]*)$ - и обработал бы его дальшеваш сценарий или что-то еще.Но это в некоторой степени зависит от того, с чем вы его используете, и, поскольку вы этого не указали, я не могу помочь сразу.

0 голосов
/ 19 июля 2011

попробуйте это ~

^product/([A-Za-z_-]|%20)+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...