リンクをカードにするプラグインを作ろう!(6)文字コードを変換する

PHP

上手くタイトルと概要文が取れないサイトの対応をします。

前回まで

OGPが設定されていないサイトのタイトルと概要文を取得しました。

[link url=”https://popozure.info/20180817/13271″]

UTF-8以外の文字コードのサイト

文字コードがUTF-8以外の場合、正しく文字を扱うことが出来ず、タイトルや概要文が取得できません。

UTF-8に文字コードを変換すると上手く扱うことが出来ます。

文字コードがEUC-JPのサイト

外部ヘッダー
外部サイトアイコンのALT
4Gamer.net
外部リンク
外部サムネイルのALT
4Gamer.net ― 日本最大級の総合ゲーム情報サイト。最新ゲームのニュース,レビュー...
ゲームの最新ニュースをお届けします。また,ゲームのタイトルのユーザーレビューの募集/掲載や,発売スケジュールなども用意。遊びたいゲームを探す時にご活用ください!
外部ボタン
←サイト名称
←タイトル
https://www.4gamer.net/ ←URL
←概要文

文字コードがシフトJISのサイト

外部ヘッダー
外部サイトアイコンのALT
nttxstore.jp
外部リンク
外部サムネイルのALT
NTTグループの安心オンラインストア - NTT-X Store
NTTグループが運営する安心・安全の通販ショップ OCN オンラインショップ(旧NTT-X Store)。「PC・家電」カテゴリでは、パソコン、液晶ディスプレイ、デジカメ、デジタル機器、ネットワークカメラ、家電などを激安価格と即納で通信販売!送料無料やクーポンなどお得な商品を多数掲載中です。
外部ボタン
←サイト名称
←タイトル
https://nttxstore.jp/ ←URL
←概要文

コードを書いていく

文字コードを変換する

cURLで取得した$htmlの文字コードをUTF-8に変換します。

[php title=”popo-blogcard.php” start-line=”26″ mark=”6″] if (curl_errno($ch ) ) {
$site_name = ”;
$title = $url;
$excerpt = ”;
} else {
$html = mb_convert_encoding($html, ‘UTF-8’, ‘ASCII,JIS,UTF-8,EUC-JP,SJIS’ );
if (preg_match(‘/property=”og:title”\s*content=”([^”]*)/si’, $html, $m ) ) {
$title = esc_html($m[1]);
} else {
if (preg_match(‘/<\s*title\s*[^>]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}[/php]

タイトルと概要文が取得できた

もう一度試してみます。

文字コードがEUC-JPのサイト

外部ヘッダー
外部サイトアイコンのALT
4Gamer.net
外部リンク
外部サムネイルのALT
4Gamer.net ― 日本最大級の総合ゲーム情報サイト。最新ゲームのニュース,レビュー...
ゲームの最新ニュースをお届けします。また,ゲームのタイトルのユーザーレビューの募集/掲載や,発売スケジュールなども用意。遊びたいゲームを探す時にご活用ください!
外部ボタン
www.4gamer.net ←サイト名称
4Gamer.net ― 日本最大級の総合ゲーム情報サイト。最新ゲームのニュース,レビューはここで! ←タイトル
https://www.4gamer.net/ ←URL
ゲームの最新ニュースをお届けします。また,ゲームのタイトルのユーザーレビューの募集/掲載や,発売スケジュールなども用意。遊びたいゲームを探す時にご活用ください! ←概要文

文字コードがシフトJISのサイト

外部ヘッダー
外部サイトアイコンのALT
nttxstore.jp
外部リンク
外部サムネイルのALT
NTTグループの安心オンラインストア - NTT-X Store
NTTグループが運営する安心・安全の通販ショップ OCN オンラインショップ(旧NTT-X Store)。「PC・家電」カテゴリでは、パソコン、液晶ディスプレイ、デジカメ、デジタル機器、ネットワークカメラ、家電などを激安価格と即納で通信販売!送料無料やクーポンなどお得な商品を多数掲載中です。
外部ボタン
nttxstore.jp ←サイト名称
NTTグループの安心オンラインストア – NTT-X Store ←タイトル
https://nttxstore.jp/ ←URL
NTTグループが運営する安心・安全の通販ショップNTT-X Store。パソコン、液晶ディスプレイ、デジカメ、デジタル機器、ネットワークカメラ、家電などを激安価格と即納で通信販売!送料無料やクーポンなどお得な商品を多数掲載中です。 ←概要文

今回のコード

今回はここまでです。

[php title=”popo-blogcard.php”]]*>\s*([^<]*)\s*<\s*\/title\s*[^>]*>/si’, $html, $m ) ) {
$title = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
} else {
if (preg_match(‘/name=”description”\s*content=”([^”]*)/si’, $html, $m ) ) {
$excerpt = esc_html($m[1]);
}
}
if (preg_match(‘/property=”og:site_name”\s*content=”([^”]*)/si’, $html, $m ) ) {
$site_name = esc_html($m[1]);
} else {
$m = parse_url($url );
$site_name = $m[‘host’];
}
}
curl_close($ch );
$html = ‘

‘.$site_name.’
‘.$title.’
‘.$url.’
‘.$excerpt.’
‘;
return $html;
}
}
$popo_blogcard = new popo_blogcard;[/php]

次回は・・・

スタイルシートを設定してブログカードっぽい見た目にしようと思います。

[link url=”https://popozure.info/20180819/13307″]

では、この辺で。(^-^)o

[amzn-link asin=”4774187062″][amzn-link asin=”B00M939Y0I”][amzn-link asin=”4798143774″][amzn-link asin=”477414164X”][amzn-link asin=”B079VVPN46″]

コメント

  1. 谷内 より:

    ぽぽろん様

    始めまして。Pz-LinkCardを大変便利に利用させて頂いております。

    抜粋文(概要文)について教えて頂きたいのですが
    Metaタグのdescription(og:description)の内容を表示させることは可能でしょうか。

    お手数ですがご教示頂けると幸いです。
    よろしくお願いいたします。

    • ぽぽろん より:

      谷内さん、ご利用&コメントありがとうございます。

      Pz-LinkCardでは、外部リンクの場合、「og:description」、「meta description」の順番で取得して表示しています。

      内部リンクの場合、記事内容から取得していますが、記事取得方法を「抜粋文が設定されている投稿はそちらを優先する」にすると、descriptionと同じ文が取得できると思います。

      どちらかのサイトで上手く取得できていない状況でしょうか?

タイトルとURLをコピーしました