在URL上使用htmlspecialchars

时间:2012-08-26 11:45:08

标签: php url encoding html-entities htmlspecialchars

我有以这种格式的网址:

  

http://site.com/index.php?title= [SOME_UNICODE_TITLE]和ID = [ID]&安培;类型= [类型]

当我尝试在此URL上使用htmlspecialchars来编码unicode标题时,该函数也会编码&;所以它会&amp,因此变量名id会转换为ampid! 所以我无法从代码中读取它。

如何在不转换特定于网址的字符(例如htmlspecialchars&,...)的情况下在网址上使用=

2 个答案:

答案 0 :(得分:3)

恕我直言,你应该只使用urlencode()来获取网址,因为这就是它的用途。如果你不能/不想使用它,你总是得到一个完整的URI。您可以在编码之前进行解析:

$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

答案 1 :(得分:0)

如果您只是对数据进行编码,而不是将htmlspecialchars应用于整个网址,则建议仅将其应用于内容。这样你就可以使用数据中的特殊字符来保存网址