13

Twitterの共有ボタンにポップアップ付きの直接リンクを使用しています: <a href="https://twitter.com/intent/tweet?url=<?php echo urlencode(get_permalink());?>&amp;text=<?php echo get_the_title(); ?>&amp;via=username" target="_blank"

クレイジーなソーシャル メディア プラグインがたくさんある中で、これが共有ボタンを実装するための最も簡単で直接的な方法です。

ただし、&タイトルに がある場合、ステータスに表示されるはずのテキストがタイトルによって中断されます。urlencode()タイトルが必要なのは理解していますが、そうすると、ステータス メッセージに特殊文字が表示されます。

現在、Twitter の共有では に を使用する必要がないため、すべての を に置き換える必要が+あります。ただし、 では動作しないようです。何らかの理由で HTML 特殊文字を出力します。のようなことをしてもうまくいきません。[space]&&amp;str_replace()<?php echo str_replace('&', '&amp;', urldecode(get_the_title())); ?>

4

1 に答える 1

49

&URLには、いくつかのパラメータを区切る特別な意味があります。URLが...a&b...「a&b」というテキストを表していない場合、2つの別々のパラメータを表します。それを避けるために、あなたurlencodeはテキストに変わる必要があります、それは&に変わり%26ます。

&toのエンコードは、すべてのsが。に置き換えられるため、テキストに含めるべきではないHTMLの文字に&amp;のみ必要です。&&%26

Wordpressの複雑さはわかりませんが、get_the_title()すでにHTMLエスケープされている値を返すと思います。&amp;つまり、の代わりにが含まれている&ので、そのように送信すると、Twitterに送信される値になります。&amp;必要なのは、HTMLエンティティなしでテキストを取得することです。つまり、実際の値に戻すには、テキストをHTMLデコードする必要があります&。HTMLデコードされた値はURLエンコードされる必要があるので、URL構文を台無しにすることはありません。

すべてをまとめると、これでうまくいくはずです。

echo urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8'));

複雑なダンスをすることなく、Wordpressから直接HTMLエンティティなしで元のタイトルを取得する方法は他にもあるかもしれませhtml_entity_decodeんが、繰り返しになりますが、Wordpressについてはよくわかりません。


PS:そのURLをHTMLコンテキストに出力しているので、HTML構文を壊さないように、URLを再度HTMLエンコードする必要がありますこれは主に学術的な完全性のためですが、HTML構文を壊す可能性のあるものを返すurlencode() べきではありません。しかし、衒学的な完全性のために、ここに:

echo htmlspecialchars(urlencode(html_entity_decode(get_the_title(), ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');
于 2012-05-27T05:00:53.727 に答える