Правильный способ экранирования от амперсанда в строке запроса, измененной mod_rewrite
-
%2526
если он обрабатывается php.
Когда apache переписывает его, он превращается из %2526
в %26
, после чего php преобразуется в &
и сохраняется в переменной запроса.
Использование правила перезаписи B
тоже работает, но тогда все плюсы в параметре остаются плюс в php.
Пример из реального мира, с которым мне пришлось столкнуться:
/group/Simon+%26+Garfunkel
С B
переписывается на
group.php?group=Simon+%26+Garfunkel
и в php вы получите
$group="Simon+&+Garfunkel";
когда вы хотели
$group="Simon & Garfunkel"
С B вам нужно
/group/Simon%20%26%20Garfunkel
, который отлично работает.
без B
вы получите
group.php?group=Simon%20&%20Garfunkel
и в итоге вы получите
$group="Simon ";
потому что &
разделяет строки запроса.
Но если вы дважды сбежите
/group/Simon+%2526+Garfunkel
переписывается на
group.php?group=Simon%20%26%20Garfunkel
и в итоге вы получите
$group="Simon & Garfunkel";
как и ожидалось.
Если URL-адрес НЕ проанализирован mod_rewrite
в "чистый URL-адрес", тогда мы можем использовать %26
очень хорошо.