在URL上使用htmlspecialchar


Using htmlspecialchars on a URL

我有以下格式的URL:

http://site.com/index.php?title=[SOME_UNICODE_TITLE]&id=[id]&type=[type]

当我尝试在这个URL上使用htmlspecialchars来编码unicode标题时,函数也编码&;所以它将是&amp,所以变量名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