RDF が文字化けする


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/27 16:47 | 最終変更
OhYeah  半人前   投稿数: 24

以前の d3diary でどうだったかは記憶にないんですが、少なくとも 0.12a2 以降では、私の環境では RDF が文字化けします。rdf.php 内の mb_convert_encoding の第3パラメータ(from_encoding)に 'auto' を指定すれば OK なので、私のサイトの mbstring 周りの設定の問題でしょうか? 現状では、下記のようになっています。

1
2
3
4
5
6
7
8
PHP Version 5.2.5
mbstring.detect_order = 'auto'
mbstring.encoding_translation = Off
mbstring.http_input = 'auto'
mbstring.http_output = 'pass'
mbstring.internal_encoding = 'UTF-8'
mbstring.language = 'japanese'
mbstring.strict_detection = Off
投票数:4 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/28 1:37 | 最終変更
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

ご報告、ありがとうございます。

今回、共通関数に変更した時に、エンコード変換をかける順番が変わったことも影響していそうです。 いずれにしても、"auto"指定が良さそうですね。

あと、別の問題としてタイトル周りにhtmlspecialcharをかけていなかったのでその修正も行ってみました。 以下のファイルでいかがでしょう。お試しいただけますでしょうか。
(これも別件ですが、カテゴリ選択で子カテゴリの記事が抽出されていなかった件も修正しています。)

filerdf.php

よろしくお願いします。
(rdf周りはいつも後手後手です・・ :-(

投票数:1 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/28 16:25
OhYeah  半人前   投稿数: 24

_MD_DIARY_PERSON, $xoopsConfig['sitename'], $xoopsModule->name(), $line['title'] の辺りに 'auto' が付いていなかったので、まだ結構化けます。

'auto' 付きにして良いってことなので、自分で書き換えました。ついでに、mbstring が disable な環境でも使用できるように修正してあります。
全文配信のためのしかけもしましたが、substrTarea のパラメータを確認していないので、未実装です。
このほか、rdf ソースのインデントの狂いや <dc:creator> の追加など細々としたところを修正してあります。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=6&lid=2

rdf チャンネルの title や description などはユーザがカスタマイズできた方が便利なので、暇があったら配信内容をテンプレートで処理するようにしようかと思っています。

投票数:3 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/29 14:29 | 最終変更
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

mb_convert_encodingの第3引数を"auto"指定とすることで、別の環境で問題が出る可能性もありますので、このあたりもオプション指定したいところではありますね。

問題は、オプション指定の方法です。 テンプレート化するだけで済めば良いのですが、テンプレートの編集もままならない人向けに管理画面で細々としたところまで指定できるようにするかどうか。。 するとなれば、管理画面に1ページを費やしたいところですね。

提示いただいたソースは、今後の参考にさせていただきます。 ありがとうございました。

なお、d3diary自体、mb_関連functionが前提になっています。 そのうち、無い場合の代替関数定義を実装しようかな、と思っていますが、、いつになるかは未定です。

投票数:2 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/30 17:21
OhYeah  半人前   投稿数: 24
引用:
mb_convert_encodingの第3引数を"auto"指定とすることで、別の環境で問題が出る可能性もありますので、このあたりもオプション指定したいところではありますね。

気になっていたのはそこです。第3パラメータ無しなら internal_encoding が使用されるので、本来なら 'auto' より問題が出にくいはずです。全部 'auto' 付きに書き換えるのは簡単ですが、やっちゃっていいものかなあと…。
それに、自分で勝手に書き換えちゃうと、rdf.php がアップデートされる度にソースを書き換えなきゃなりません。なわけで、書き換えが1か所ですむように、関数化したわけです。mbstring 無しの環境にも対応させたのはおまけに過ぎません(あれは xoops_utf8_encode のバグを取っただけですし)。

引用:
問題は、オプション指定の方法です。 テンプレート化するだけで済めば良いのですが、テンプレートの編集もままならない人向けに管理画面で細々としたところまで指定できるようにするかどうか。。 するとなれば、管理画面に1ページを費やしたいところですね。

う?ん、テンプレート編集がままならない人が、どれくらい管理画面で細かな設定をするかなあ…。とりあえずは、プリファレンスに from_encoding を設定する項目がひとつあれば OK だと思います。これさえあれば、rdf.php がアップデートされても毎回 rdf.php を書き換える必要はなくなりますから。
あとは、rdf だとカスタマイズするっていっても、せいぜい rdf チャンネルの title と description くらいですよね。別ページまでは不要かも…。

投票数:1 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/30 18:56
OhYeah  半人前   投稿数: 24

uid 無指定の場合に、各記事の作成者が取得できていなかったバグを修正しました。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=6&lid=2

投票数:3 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/30 22:23 | 最終変更
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

バージョンアップのご報告、ありがとうございます。 そういえば、各記事の作成者は取得していなかったですね。。 :roll:  記事数分回すとアレなんで、こちらで実装するときは、元の記事取得のSQLにINNER JOINで書こうと思います。

いずれにしても、次の版ではテンプレート化をすることにしますね。 そうしておけば、将来ATOMやRSS2.0を作るのも楽できますし。 :-D
(オプションについては、ご指摘のようにそれほどの内容ではないですね。 取り急ぎ"auto"の件だけでも良さそうですね。)

その際にも、動作報告など、どうぞよろしくお願いします。

確認ついででお願いなのですが、今回追加したもので、カテゴリ・記事権限をユーザー指定する際の、「suggestion」機能をxpWikiを参考にajaxで組み込んだのですが、これが日本語ユーザー名(または日本語本名)で正常に動作しますでしょうか、動作チェックいただけると大変助かります。 

(追伸)
別件ですが、d3forumの独自色調無効化(テーマ色調反映)ハック版を作成中です。 元記事権限ハックその他、全部突っ込む予定です。 本名表示も対応予定。 何か要望ありますか?

投票数:3 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 3:47 | 最終変更
OhYeah  半人前   投稿数: 24
引用:
記事数分回すとアレなんで、こちらで実装するときは、元の記事取得のSQLにINNER JOINで書こうと思います。

確かに。普段使っている SQLite だと、別テーブルから JOIN したフィールドを取得するより、それぞれのマスターテーブルから別途検索した方が高速なので、ついそのクセが…。

引用:
いずれにしても、次の版ではテンプレート化をすることにしますね。 そうしておけば、将来ATOMやRSS2.0を作るのも楽できますし。

実は、昨夜テンプレート版も完成してたんですが、全文配信が未実装だったので、0.2 の方を上げました。
現在は 0.3 で、テンプレート化及び全文配信対応版です。とりあえず、全文配信するかどうかはテンプレートの先頭で指定するようにしてあります。

カテゴリー・記事権限については、あとで確認してみます。d3forum については、今のところ特に要望はありません。

投票数:4 平均点:10.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 4:22
OhYeah  半人前   投稿数: 24

記事毎の権限設定は OFF なので、カテゴリ編集だけ確認してみましたが、日本語に関しては特に問題はなさそうです。

ただ、「カテゴリーの編集」テーブルのカラム配置は、なーおさんの意図通りでしょうか? 私のサイトだとサブカテゴリーがないせいか、配置がおかしいです。

投票数:2 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 8:27 | 最終変更
OhYeah  半人前   投稿数: 24

プリファレンスに from_encoding オプションが追加されるまで、テンプレートで from_encoding も指定できるようにしようかと思ったのですが、面倒なので設定ファイルから読み込むようにしました。ついでに、全文配信オプションも、テンプレートではなく設定ファイルで指定するように変更しました。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=6&lid=2

しかし、よく考えてみたら、テンプレート化したってことは、テンプレートで全文配信部分をコメントアウトすれば全文配信はされないってことなので、$fullcontent って必要なかったですねorz。

1
<{*    <content:encoded><![CDATA[<{$entry.content}>]]></content:encoded>*}>

なお、ユーザ名取得は 0.3 と同じ方法で、変更していません。

投票数:3 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 9:38 | 最終変更
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

色々ありがとうございます。
テンプレート化もされていたんですね。

取り急ぎ、当方でもテンプレート化と、RSS2.0配信を組み込んでみました。(まだ非公式版です。) モジュールアップデートを2回かけてください。

filed3diary_0.12b2.zip

  1. prefferenceでは、「default」(第3引数指定なし)/「xoops_charset」(_CHARSET)/「auto」(auto) の3Optionとしてあります。
  2. fullcontentは、とりあえず渡してみただけでテンプレートでコメントアウトし、検証していません。 OhYeahさんのHPでd3blogでの対応が書かれていたのですが、ちょっと理解が追いつかないので・・
  3. root_path側のRSS2.0の画像が追加となり、1.0の画像も更新されています。
  4. mb_stringのemulatorは、nao-ponさんのhyp_commonと共通化で組み込みました。

以上、お試しいただき、おかしなところがあればご指摘いただけますでしょうか。 よろしくお願いします。

投票数:2 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 12:30 | 最終変更
OhYeah  半人前   投稿数: 24

xoops_charset でもいけました。で、言語周りの設定を良く確認してみたところ、global.php の _MBSTRING_LANGUAGE を ja_utf8 に設定してあったようで、ここを japanese に戻したら default でも文字化けはなくなりました。どうもお騒がせしました。

全文配信ですが、CDATA 内に記述する場合は htmlspecialchars は不要です。というか、生 html を渡さないと、フィードリーダのレンダリングシステムによるかもしれませんが、Opera なんかでは画像等の取得ができなくなります。下記のようにすると、Opera で画像も含めて表示できるようになりました。

1
		$entry['diary'] = $d3dConf->func->convert_encoding_utf8($d3dConf->func->substrTarea($dbdat['diary'], $dbdat['dohtml'], 0, false, "UTF-8"));

あと、rdf.xml の <content:encoded> で、CDATA[' のシングルクォートは余分ではないかと…。

投票数:3 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/10/31 16:16
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

検証いただき、ありがとうございました。
全文配信の部分のコードを修正し、Attachfileモジュールのプラグインを同梱して、先ほどと同バージョンでアップしました。

Attachfileモジュールのプラグインのほうは、記事閲覧権限に連動してダウンロードが許可されますので、直打ちされても大丈夫に作ってみました。 機会がありましたらお試しください。

では、また何かありましたらご連絡お願いします。 :-)

投票数:3 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/11/1 13:44 | 最終変更
OhYeah  半人前   投稿数: 24

お疲れ様でした。新版を公開されたばかりのところで申し訳ありませんが、d3blog のフィードの件も含めて RSS1.0 と ATOM の仕様を数年ぶりに読み直してみたら、htmlSpecailChars で html 特殊文字をエンコードしておけば、わざわざ CDATA セクションに生 html を埋め込む必要がないことが判明しました。生 html は少々危険なので、切り替えた方が良さそうです。

RSS2.0 は全然チェックしていませんが、RSS1.0, ATOM とも Opera, d3pipes と Google リーダーで画像を含めて問題なく取得できることを確認したので、下記に公開しました。ATOM では更新時刻も配信可能なので、rdf.php も update_time を取得してアサインするように変更してあります。
次の更新の際にでも、こちらをお使いください。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=6&lid=2

しかし、こうなると rdf.php, rdf.xml というファイル名はちょっと違和感がありますね。

2010.11.1 23:23 追記
後で htmlSpecialChars に ENT_QUOTES パラメータを追加しようと思ってたのに、すっかり忘れてました(^_^;)。RDF ではシングルクォートもエンコードしておく必要があるので、&apos; には変換できませんが、ENT_QUOTES にしておいた方が間違いないと思います。
現在私のサイトで公開しているものは、ENT_QUOTES を追加しています。

投票数:1 平均点:10.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/11/2 1:13 | 最終変更
なーお  長老   投稿数: 1832 オンライン

OhYeahさん、こんにちは。

ATOMフィードの追加や、update_time追加、htmlSpecialCharsに引数ENT_QUOTES追加など、実装作業をありがとうございます。 早速、ほぼそのまま取り込ませていただき、ver0.12b3としてリリースしました。 :-)

一点だけ、全文配信したRSSを、他のサイトのd3diaryの外部ブログ設定をしても、記事を取り込めない、という事態になりまして、 RSS取得側は検証がかなり面倒なので、全文配信はコメントアウトとさせていただきました。ご容赦ください。

また、「rdf.php」というURLがしっくりこない件、確かにそうなんのですが、変更すると既存リンクを切らさないためにもラッパー処理が必要になったりしますんで、少し考えてから変更するかどうか決めようと思います。

最近、d3diaryユーザー数も増えてきたところですので、このタイミングでOhYeahさんに手を入れていただき、大変助かりました。 重ねてありがとうございました。 :-)

投票数:0 平均点:0.00
返信する

なし Re: RDF が文字化けする

msg# 1.1.1.2.1.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2010/11/2 11:02
OhYeah  半人前   投稿数: 24
引用:
一点だけ、全文配信したRSSを、他のサイトのd3diaryの外部ブログ設定をしても、記事を取り込めない、という事態になりまして、 RSS取得側は検証がかなり面倒なので、全文配信はコメントアウトとさせていただきました。ご容赦ください。

元々の RDF フィードが <content:encode> を使ってなかったので、当然記事取り込み部もそれを想定してなかったってことですね。全文配信は、リーダ側でちゃんと取得できるかどうかのチェックのために有効にしてあっただけで、追加した ATOM はともかくとして、従来からある RDF はこういう問題が無くてもデフォルトで無効にしておいた方が良いと私も思っていました。どうぞお気遣い無く。

投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ

ログイン

メインメニュー

テーマ選択
Cube