我有以下格式的URL:
http://site.com/index.php?title=[SOME_UNICODE_TITLE]&id=[id]&type=[type]
当我尝试在这个URL上使用htmlspecialchars
来编码unicode标题时,函数也编码&
;所以它将是&
,所以变量名id
被转换为ampid
!所以我无法从代码中读取。
如何在不转换URL特定字符(例如&
、=
…)的情况下在URL上使用htmlspecialchars
?
IMHO您应该只使用urlencode()
作为URL,因为这就是它的用途。如果你不能/不想使用它,并且你总是得到一个完整的URI。您可以在编码之前解析if:
$uriParts = parse_url($fullUri);
$queryParts = array();
parse_str($uriParts['query'], $queryParts);
foreach($queryParts as $name => $value) {
$queryParts[$name] = htmlspecialchars($value);
// don't know whether you want to encode the key too
}
http://php.net/manual/en/function.parse-str.php
http://www.php.net/manual/en/function.parse-url.php
示例:http://codepad.viper-7.com/lIFiHB
如果你只想对数据进行编码,而不是将htmlspecialchars应用于整个url,则建议只将其应用于内容。通过这种方式,u将使用数据中的特殊字符来保存url