我想在php中使用一段代码来了解B标志的工作原理。
我的htaccess文件位置是Applications / AMPPS / www / h或localhost / h 有以下代码
RewriteRule search/(.*)$ /search.php?$1 [R,QSA,B]
当我点击网址时localhost/h/search/x & y/z
与B旗我得到了这个:localhost/search.php?x+%2526+y%252fz
没有B标志我得到了这个:http://localhost/search.php?x%20&%20y/z
现在,如果我使用php的字符串x & y/z
的urlencode,那么x+%26+y%2Fz
会将+
替换为B标志,而&
则替换%2526
B标志提供类似%26
的输出,urlencode提供x%2B%2526%2By%252Fz
,当我再次对编码输出重新编码时,变为类似:%26
,是,将%2526
编码为{{ 1}}但编码+
所以在这两种情况下,它都不会这样做,B确实如此。我需要像B那样匹配它。
此外,我可以找出哪些可能的字符(可能有一个列表),我可以找出B可以编码哪些非字母数字字符,以及如果我试图从php的前瞻性中理解B如何对它们进行编码
答案 0 :(得分:1)
<style type="text/css">
#height {
width: 200px;
}
#height option {
width: 500px;
height:200px !important;
}
</style>
<select id="height">
<option value="bugatti">Bugatti</option>
<option value="lamborghini">Lamborghini</option>
<option value="ferrari">Ferrari</option>
<option value="levis">Levis</option>
<option value="reebok">Reebok</option>
<option value="nike">Nike</option>
</select>
将编码所有非字母数字字符。因此,除了36(A-Z 0-9)或62(A-Z a-z 0-9)字母数字字符之外的每个字符都将被转义。
首先,为什么需要[B] flag
?正如您所说,网址中的字符串[B] flag
会导致x & y/z
无效,因为x%20&%20y/z
是reserved characters in URL's even after percent encoding之一。
所以&
只会在PHP中为您提供x%20&%20y/z
。
所以现在你需要旗帜。让我们分析它对您的示例字符串的作用:
x
这将导致PHP中出现x & y/z
x%20&%20y/z // encode all spaces (%20)
x%20%26%20y%2Fz // encode the & (%26) and / (%2F)
。
您可能感到困惑的是,您在浏览器中看不到正确的编码。
让我们分析一下您x & y/z
使用x+%2526+y%252fz
的原因:
[R] flag
被编码为&
如果您再次对此进行编码,%26
将被编码为%
,结果将为%25
。但为什么两个特殊(保留)字符都被编码两次?
这是因为重写模块首先对特殊字符进行编码,然后默认编码所有内容。
如果要取消此操作,可以使用%2526
标记。
获取[NE]
代替+
的行为似乎是使用%20
和[B]
的副作用,因为如果您仅使用这种情况就不会发生[R]
要回答您的问题:[R]
与PHP's rawurlencode的内容相同。