簡體   English   中英

頁面從“#”作為GET參數崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM