仕事×副業×ライフハック

副業HACK.com

【クイズ】国名漢字いくつ読める?

全問正解率5%以下の難問クイズ

PHP 課題解決

PHPからのTwitter投稿で「&」「"」「<」「>」などが表示されたときの対処方法

投稿日:

こんにちは財前博文です。

PHPから行ったTwitter投稿で、少し予想外のことが起きたのでメモ投稿します。

状況

  • WordPressのPHP環境を利用して、PHPからTwitterにTweet投稿をする機能を実装
  • 投稿する内容は、ニュースサイトの更新情報(タイトルやURL)
  • Tweet自体はうまく行ったが、投稿テキストに「&」「"」「<」「>」が表示された

 

原因調査

原因を調べていったところ以下のことがわかりました。

「&」「"」「<」「>」などは『HTML特殊文字コード』というもので、HTML上に記号を表示させるためのもの

「&」「"」「<」「>」は、『HTML特殊文字コード(またはHTMLエンティティ)』といわれるものでした。

HTML特殊文字コードは、HTMLのコンテンツ(文章の一部)として記号を表示したいときに使うコードです。

HTML特殊文字コードは沢山ありますが、上記例だと、以下の記号文字として、HTML上で変換されます。

「&」→「&」(アンド)
「"」→「"」(ダブルコーテーション)
「&lt;」→「<」(小なり)
「&gt;」→「>」(大なり)

参考 ⇒ HTML特殊文字コード表

確かに、これらの記号はHTMLソースとして使われる記号ですから、単純に「&」「"」「<」「>」と書いてしますと、HTMLの構文エラーとなってしまいます。

 


 

Twitterに投稿する文字列の中に、このHTML特殊文字コードを含まれていた

では、どうしてTwitterの投稿文にHTML特殊文字コードが表示されてしまったのか。

答えは、以下のとおり。単純でした。

  1. Twitterに投稿する文字列の中にHTML特殊文字コードが含まれていたから
  2. Twitter上ではHTML特殊文字コードは記号に変換されずにそのままの文字列として表示される

1.について、私がPHPを使ってTwitterに投稿した内容は、先述のとおり「ニュースサイトの更新情報(タイトルやURL)」でした。

更新情報はRSSフィードから取得しており、取得した文字列をそのままTweetする流れにしていました。

一番最初は文字化けの類を疑いましたが、RSSフィードから取得した文字列内にHTML特殊文字コードが含まれていたことが原因でした。

 

※なお、一部のサイトに対しては、RSSフィードがなかったため、HTMLを解析してRSSフィードを作成してくれるフリーサービスを利用し、更新情報を取得していました。

一般的なRSSフィードが、HTML特殊文字コードを含めないのが通常かどうかは詳しくないですが、

少なくとも、フリーサービスは単純にHTML情報を拾ってくる仕組みと思われるので、HTML特殊文字コードが紛れ込んでしまったと思われます。

 

解決策

PHPの解決策はとても簡単でした。

HTML特殊文字コードを「ただの記号」に直してくれるhtml_entity_decodeという関数があります。

$data = html_entity_decode($data);

こうするだけで一発解決でした。

参考 ⇒ 「PHPリファレンス」

-PHP, 課題解決