真夏でもホットコーヒーを好んで飲む、ユゲタです。
アイスコーヒーは邪道と言って、汗だくになりながら、灼熱の日に飲むコーヒーは、ある意味地獄です。
アホですね・・・オレ・・・
自作のフレームワークに、ブログシステムを設けてみたんですが、よく考えたらrss機能って必至ということに気が付きました。
RSSフィードを使ってネットの記事収集をしている人もたくさんいるので、この機能があるだけで、ブログを読んでもらえる機会が増えるので、おもてなし機能として必至です。
そんなRSS機能自体は、XMLデータを出力するだけなので、さほど難しいものではないし、ブログデータの一覧を出力するだけのことなのですが、出力してみると、どうしても、特定の箇所だけ文字が入らず空欄になってしまう・・・
いろいろ調べて分かったことを書いておきます。
見つけた使用できない文字列
文字が入らなかったのは、特定のURLの箇所で、「&」文字列がある箇所が、データが空欄になってしまいます。
どうやら、これはPHPのXMLの解釈で、使用できない文字列が存在するという事がわかりました。
他にも使用できない文字列は存在すると思いますが、「&」が使えないと、URLクエリーがセットできません。
困ったものだ・・・
$link = "http://example.com/index.php?a=test&b=hoge&c=id";
-> rss出力すると・・・
...
<link />
...
対応策
対応策は意外と簡単で、以下のようにすることで、文字列を表示することができました。
$link = "http://example.com/index.php?a=test&b=hoge&c=id";
$link = htmlspecialchars($link , ENT_XML1 , "UTF-8");
-> <link>http://example.com/index.php?a=test&b=hoge&c=id</link>
phpのデフォルト文字コードが"UTF-8"じゃない場合は、適宜変更して使用してください。
あとがき
最近、文字コード関連でつまずくことが多かったのですが、その昔のShift-JIS問題よりはマシになりましたが、
文字バケ問題って、なかなか無くならないですね〜。
もちろん、システムによって使えない文字列があるのは理解できますが、言語でカバーしてもらいたいものです。
今回のRSSも、SimpleXMLのaddCHildの基本関数などで、内部コンバートしてくれるだけでいいのに・・・
でも、まあ、出来ない事がわかっていれば、時間を無駄にしないという自己スキルでもあるので、貴重な開発時間を無駄にしないようにどんどんスキルアップしなければ!!!
参考ページ
XML エラーの対応
https://www.php.net/manual/ja/simplexml.examples-errors.php
0 件のコメント:
コメントを投稿