Почему rawurlencode () в PHP добавляет к амперсандам дополнительные escape-символы?

Думаю, мне здесь не хватает чего-то очевидного, но это сводит меня с ума, и я не могу этого понять. Я разрабатываю плагин WordPress, и его часть должна взять заголовок сообщения WordPress и отправить его в веб-службу RESTful, чтобы сделать что-то еще. Конечно, я хочу использовать rawurlencode () для заголовка сообщения, потому что кто знает, какой текст там может быть. Однако по какой-то причине в выводе, который я получаю, есть лишние escape-символы, и я понятия не имею, откуда они берутся (и это, очевидно, вызывает проблемы с веб-службой, которую я вызываю).

Мой код довольно прост:

$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; но я до сих пор не знаю, откуда это.


person Michael Ridley    schedule 04.03.2011    source источник


Ответы (2)


Кажется, между ними тоже есть кодировка html, вместо &, & находится в закодированной строке. Вероятно, потому что & нужно экранировать в html, а функция get_title экранирует это, используя html_special_chars или что-то в этом роде.

person markijbema    schedule 04.03.2011
comment
Да, я думал, что это может происходить, но когда я печатаю результат get_title_function (), это буквально то, что я опубликовал a & b - ничего не ускользнуло. Итак, кодировка HTML исходит из rawurlencode () - это единственная функция, которую я вызываю между двумя операторами echo, вывод которых я задаю в вопросе. - person Michael Ridley; 04.03.2011
comment
Ой, подождите, знаете что. Я только что понял, что происходит ТОЧНО. Когда я печатал его, в моем браузере он отображался как text / html, поэтому я не смотрел на источник и не замечал экранирования. Не могу поверить, что не уловил этого. Дох! - person Michael Ridley; 04.03.2011

У меня были проблемы с этим, когда я использовал старую версию php

person Joseadrian    schedule 04.03.2011
comment
Да, я использую версию 5.3.3, но я погуглил, чтобы узнать, была ли это известная ошибка, и ничего не увидел. Кроме того, я полагаю, что этому плагину может потребоваться запускать разные версии на сайтах общего хостинга, поэтому я хочу сделать его максимально совместимым. Если это действительно ошибка rawurlencode (), я удивлен, что в Google не так много появилось и у многих людей возникла эта проблема ... - person Michael Ridley; 04.03.2011