Я использую прямую ссылку со всплывающим окном для кнопки совместного доступа в Twitter: <a href="https://twitter.com/intent/tweet?url=<?php echo urlencode(get_permalink());?>&text=<?php echo get_the_title(); ?>&via=username" target="_blank"
Со всеми сумасшедшими плагинами социальных сетей, это самый простой и самый прямой способ для меня реализовать кнопку совместного доступа.
Однако, когда в заголовке есть &
, заголовок разбивает текст, который должен отображаться для статуса. Я понимаю, вам нужно urlencode()
название, но когда я это сделаю, он отображает специальные символы в сообщении о состоянии.
Поскольку вам больше не нужен +
для [space]
в разделе Twitter, мне нужно заменить any &
, Однако он не работает с str_replace()
. Он по некоторым причинам выводит специальные символы HTML. Выполнение чего-то вроде <?php echo str_replace('&', '&', urldecode(get_the_title())); ?>
<?php echo str_replace('&', '&', urldecode(get_the_title())); ?>
тоже не работает.
&
имеет особое значение в URL-адресах для разделения нескольких параметров. Если ваш URL-адрес ...a&b...
, который не представляет текст «a & b», он представляет два отдельных параметра. Чтобы этого избежать, вам нужно urlencode
текст, который превращается &
в %26
.
Кодирование &
&
необходимо только для символов &
символов в HTML, которые вы не должны иметь в своем тексте, так как все они заменяются на %26
.
Я не знаю сложностей WordPress, но я думаю, что get_the_title()
возвращает значение, которое уже 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. Это в основном для академической полноты, хотя urlencode()
не должен возвращать ничего, что может нарушить синтаксис HTML. Но только для педантичной полноты, здесь:
echo htmlspecialchars(urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');