为什么PHP中的rawurlencode()会为&符号添加额外的转义字符?

时间:2011-03-04 01:21:43

标签: php wordpress post urlencode

我想我在这里遗漏了一些明显的东西,但它让我发疯,我无法弄明白。我正在开发一个WordPress插件,其中一部分需要获取WordPress帖子标题并将其发送到RESTful Web服务以执行其他操作。所以当然我想要rawurlencode()帖子标题,因为谁知道那里可能有什么文字。但是,出于某种原因,我得到的输出有额外的转义字符,我不知道它们来自哪里(并且它导致了我正在调用的Web服务的问题)。

我的代码非常简单:

$topic = get_the_title($post_id);
$curl_post_fields = 'name=' . rawurlencode( $topic );  

然而,当我打印出这两个字符串的输出时,我得到了:

topic=a & b
name=a%20%26%23038%3B%20b

我希望URL编码的字符串是

name=a%20%26%20b

我不知道额外的%23038%3B可能来自哪里。如果我正确地读取编码,则转换为#038;但我仍然不知道它来自哪里。

2 个答案:

答案 0 :(得分:2)

中间似乎还有一个html编码,而不是&&位于编码字符串中。可能是因为&必须在html中进行转义,get_title函数使用html_special_chars或类似的东西来转义它。

答案 1 :(得分:0)

当我使用较旧的php版本时,我遇到了一些问题