Ответ 1
&
имеет особое значение в URL-адресах для разделения нескольких параметров. Если ваш URL-адрес ...a&b...
, который не представляет текст "a & b", он представляет два отдельных параметра. Чтобы этого избежать, вам нужно urlencode
текст, который превращает &
в %26
.
Кодирование &
до &
необходимо только для &
символов в HTML, чего вы не должны иметь в своем тексте, поскольку все &
заменяются на %26
.
Я не знаю сложностей Wordpress, но я думаю, что get_the_title()
возвращает значение, которое уже выведено HTML. Значение, оно содержит &
вместо &
, так что значение, которое отправляется в Twitter, если вы отправляете его именно так. Вы хотите получить текст без HTML-объектов, т.е. Вам понадобится HTML-декодировать его, чтобы превратить &
обратно в фактическое значение &
. Затем декодированное HTML-значение должно быть закодировано по URL-адресу, поэтому оно не испортит ваш синтаксис URL.
Объединяя все это, мы, надеюсь, сделаем это:
echo urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8'));
Могут быть другие способы получить исходный заголовок без HTML-объектов непосредственно из Wordpress без необходимости выполнять сложный танец html_entity_decode
, но опять же, я не очень много знаю о Wordpress.
PS: Поскольку вы выводите этот URL-адрес в контекст HTML, вы должны снова закодировать URL-адрес HTML, чтобы убедиться, что он не нарушает ваш синтаксис HTML. Однако в основном для академической полноты, urlencode()
не должен возвращать ничего, что может нарушить синтаксис HTML. Но только для педантичной полноты, здесь:
echo htmlspecialchars(urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');