人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでRSSリーダーを作っています。
<content:encoded>にも対応させ、本文も表示させようと思い、http://weather.goo.ne.jp/area/4220.rdfに対し、下記のようなコードで表示させようとしましたうまく行きません。<title>や<description>とは異なった表示方法が必要なのでしょうか?
$title=$myar[TITLE][$i+1];
$title = mb_convert_encoding($title, "SJIS", "auto");
$text=$myar[DESCRIPTION][$i+1];
$text = mb_convert_encoding($text, "SJIS", "auto");
$contents = $myar["CONTENT:ENCODED"][$i+1];
$contents = mb_convert_encoding($contents, "SJIS", "auto");

●質問者: SlowLife
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP RSSリーダー SJIS コード 対応
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● いのくに
●27ポイント

$myar に値を代入するする箇所の code を記述されないと何とも答えられませんよ。

http://www.php-resource.de/forum/showthread/t-55730.html

◎質問者からの返答

すいません おっしゃるとおりでしたね。

$myar=getXmlData($data);で下記を呼び出しています。

function getXmlData($xml_doc) {

$n=0;

$ar=array();

$parser = xml_parser_create();

xml_parse_into_struct($parser,$xml_doc,$vals,$index) or exit(xml_error_string(xml_get_error_code($parser)));

xml_parser_free($parser);

$ttags=array();

for($n=0;$n<=count($vals)-1;$n++) {

if(trim($vals[$n][value])) {

$ar[$vals[$n][tag]][count($ar[$vals[$n][tag]])]=$vals[$n][value];

$ttags[$vals[$n][tag]]=$vals[$n][tag];


}

}

$tags=array();

foreach($ttags as $tagi) { array_push($tags,$tagi); }

return $ar;

}


2 ● kidd-number5
●27ポイント

titleやdescription要素の中身はテキストノードですが、content:encode内部にはCDATAノードが入っているので、

たとえば(単なる予想ですが)こんなふうに

xml_set_character_data_handler($parser, 'cdata');

function cdata($parser, $cdata){
 $myar["CONTENT:ENCODED"][] = $cdata;
}

CDATAを扱うためのコードを書く必要があると思います。

http://jp.php.net/xml


3 ● kidd-number5
●26ポイント

print_r($myar);

http://jp2.php.net/print_r

したときに、

Array(
(略)
 [DESCRIPTION] => Array
 (
 [0] => <なにか>
 )
(略)
 [CONTENT:ENCODED] => Array
 (
 [0] => <なにか>
 )
)

ってなれば$myar['CONTENT:ENCODED']で取れると思うのですが、そうなっていないとなると取れないでしょうね。

手元のPHP(5.2)では上記のように出てきたのですが、バージョンによるのかもしれません。バージョンはいくつですか?

#回答回数の都合でここまでしかコメントできませんが。

◎質問者からの返答

ありがとうございます

色々やってみたのですが、上記の関数function getXmlData($xml_doc)の内部だと、 [CONTENT:ENCODED]のCDATAセクションがきちんと読めます。

結局、かっこ悪いですが、関数内でグローバル変数に直接書き込むことで対応しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ