[英]Page crashing from '#' as a GET-parameter
我一直在使用URL參數來使搜索表單后面的目標網頁更加個性化。 我覺得像這樣的東西比較防彈
$string = $_GET['city']
$res = preg_replace("/[^a-zA-Z0-9]/", "", $string);
直到我嘗試將?city =#之類的值用作值,然后我的整個頁面崩潰了,我不再確定了。
在不編寫整個引擎或至少不使頁面從#崩潰的情況下進行驗證的方法是什么?
謝謝
PHP具有許多功能,可幫助您避免此類問題。
每當您創建要在瀏覽器中顯示的URL時,都必須使用Urlencoded 。 如果您只是將查詢字符串部分附加到固定的URL,則可以使用http_build_query構建該字符串。 例如:
$querystring = [
'param1' = 123,
'param2' = 'hello with a #'
];
$QS_encoded = http_build_query($querystring);
echo '<a href="?'.$QS_encoded.'">My link</a>';
URL中的#
表示URL的另一部分,即哈希部分。 這不會成為$_GET
超全局變量的一部分。
如果出於任何原因您想手動輸入帶有#
的查詢字符串作為URL,那么您需要使用編碼版本%23
。 例如http://php.net/manual-lookup.php?pattern=%23
附帶說明。 您不應該使用正則表達式來過濾這樣的數據。 PHP對此已經有了一個擴展: filters 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.