「【不具合】はてなブックマーク「最近の人気エントリー」をRSSがエラーになる。詳細コメント idea:15196再発 」

詳細:http://i.hatena.ne.jp/idea/15337
RSSの<description>の切り出しがうまくいっていないようですが、何が原因だと思いますか?
恐らく他の文字コード(EUC-JP,S-JIS)からUTF-8に変換する際に問題が発生しているのだと思いますが、何か考えられる原因はありますか?

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:2007/05/28 12:26:52
  • 終了:2007/06/04 12:30:04

回答(2件)

id:TNIOP No.1

TNIOP回答回数2344ベストアンサー獲得回数582007/05/31 13:01:07

ポイント60pt

どっかに変なタグを入れちゃってるとか。

あり得ないこともないです。はてなですから。

http://q.hatena.ne.jp/1180322811

id:garyo

ありがとうございます。

けっこう何度も指摘されているのに、修正されないのは何故でしょうね。

2007/05/31 18:13:44
id:hallo21 No.2

hallo21回答回数246ベストアンサー獲得回数22007/05/30 02:07:57

ポイント10pt

うちでも頻繁に文字化けしてます。最近。あなたのせいではないです。

http://end

  • id:garyo
    不具合事例1 http://i.hatena.ne.jp/idea/15337
    1.発生時のRSS(WEB魚拓)これをIE6で開くとエラーになります。
    http://megalodon.jp/?url=http://b.hatena.ne.jp/hotentry%3fmode%3drss&date=20070528061906


    2.エラー内容

    The XML page cannot be displayed
    Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


    --------------------------------------------------------------------------------

    An invalid character was found in text content. Error processing resource 'http://b.hatena.ne.jp/hotentry?mode=rss'. Line ...

    <description> 「無期懲役は期限を決めない懲役刑であって終身刑とは違う」といった誤解をよく見かけますが、これは誤りです。 無期懲役は、一生続く刑罰です。 しかし、刑務所に必ず一生いなければならないのでは反省する意欲が薄れる...


    3.はてなブックマーク
    http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/youhei2007/20070309
    刑の終了を意味するものではなく、残刑期間について保護観察に付�...</p>


    4.記事
    http://d.hatena.ne.jp/youhei2007/20070309




    不具合事例2 http://i.hatena.ne.jp/idea/15196
    1.発生時のRSS(WEB魚拓)これをIE6で開くとエラーになります。
    http://megalodon.jp/?url=http://b.hatena.ne.jp/hotentry%3fmode%3drss&date=20070515064706


    2.エラー内容
    The XML page cannot be displayed
    Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


    --------------------------------------------------------------------------------

    An invalid character was found in text content. Error processing resource 'http://b.hatena.ne.jp/hotentry?mode=rss'. Line ...

    <description> 「無期懲役は期限を決めない懲役刑であって終身刑とは違う」といった誤解をよく見かけますが、これは誤りです。 無期懲役は、一生続く刑罰です。 しかし、刑務所に必ず一生いなければならないのでは反省する意欲が薄れる...


    3.はてなブックマーク
    http://b.hatena.ne.jp/entry/http%3A//www.welcom.ne.jp/hideaki/hideaki/another.htm


    4.記事
    http://www.welcom.ne.jp/hideaki/hideaki/another.htm
  • id:garyo
    これだけ詳細に発生時の現象がわかっていれば、WEB系に詳しい方であれば、何が原因で発生しているのか想像がつくのではと思い質問してみます。


    私の予想では
    1.はてなブックマークに記事を登録する
    2.この時に<description>に設定するデータが文字化けを起こす
    3.はてなブックマークで表示する際は何か加工して
      エラーにならないように処理をしている
    4.Hot Entry入りをしてRSS出力する際は1.のデータをそのまま出力している
    5.IEが文字コード異常とみなしエラーになる。


    だと思いますが、2.がなぜ起こるのかどなたかわからないでしょうか。


    例1 特定のパターンの(EUC-JP,S-JIS)をUTF-8に変換すると文字化けする
    例2 何か文字列長の計算を間違えている
    例3 3.で行っている文字異常時の処理がRSS出力時は省いてある。
  • id:garyo
    具体的なエラー発生時の文字パターンは以下のようになっていました。

    1.http://i.hatena.ne.jp/idea/15337 時
    ※以下の81の所でおかしくなっている

    bb 98 E3 81 2e 2e 2e 3c 2f
    の....</

    2.http://i.hatena.ne.jp/idea/15196 時

    ※以下のBDの所でおかしくなっている

    89 8B E3 81 AB EF BF BD 2E 2E 2E 3C 2F 70 3E 3C
    ..に.. ....</p><

  • id:garyo
    不思議なのははてなブックマークで<description>を表示しているときはエラーを起こさないことです。

    可能性として以下の3つがあるのではと考えます。


    1.はてなブックマークで<description>を表示するときは文字化け対策をしている。
    2.htmlファイル表示時とXMLファイル表示時で動作が異なる
    3.内部に保存しているデータは正しいが、RSS出力時にバグって余計なものをつけるか、削るかしている。


    また、常時発生するわけではないので、(発生日 2007-05-28,2007-05-15 約2週間に1回)何かの条件、タイミングが成立した時に発生していると思われる。
  • id:garyo
    <description>のデータの中身はデータベースに保存してあると思うので
    http://b.hatena.ne.jp/entry/http%3A//d.hatena.ne.jp/youhei2007/20070309
    について

    1.まずデータベースに保存してあるデータを確認する
      上記で問題が無ければ、そこから出力するまでを調査


    2.1.でデータ化けが発生している場合
      擬似的な環境などで、元記事を始めてブックマークした場合に再現するか確認
      再現すれば原因を確認


    3.2.で再現しない場合
      スレッド等の排他制御が正しく行われているか、競合が発生していないか確認


  • id:garyo
    HotEntryでなくはてなブックマークの「URL検索」の出力をRSS出力させても再現しました。
    http://b.hatena.ne.jp/entrylist?mode=rss&url=http%3A%2F%2Fd.hatena.ne.jp%2Fyouhei2007&sort=hot&threshold=3



    文字化けが発生する原因が切り分けられると原因がわかりそうです。
    1)「記事(文字コード、文字列の組み合わせ)」によるもの
    2)登録時のタイミングによるものか


    これは同じ文章で新しいブックマークを作成すればわかるかも知れません。
  • id:garyo
    はてなブックマーク UTF
    はてなダイアリ EUC


    「このページをブックマークに追加」ブックマークレットを
    javascript:window.location='http://b.hatena.ne.jp/add?mode=confirm&title='+escape(document.title)+'&url='+escape(location.href);
    見ればわかるように、サーバーへは「タイトル」と「URL」しか送っていないので<description>の部分はサーバーがURLが示す所を読み出して、データベースに記録していると思われる。


    しかしS-JISならともかくEUC(しかもはてなダイアリならしっかりとhtmlのどこかでEUCだと宣言していると思う)の文字長を数え間違えたり、他の文字と間違うことがあるのだろうか?


    WEBに詳しい方教えてください。
  • id:garyo
    エラーが起こってる<description>を見たら両方とも丁度0x200バイトだった。


    もしかして文字列記憶領域は0x200固定?
    そして<description>の長さが記事ごとに変わるので


    1.<description>の長さが0x200バイトを超える
    2.最後の文字が0x200をまたがり切れる


    この両方の条件が成立したときに起こっているとか。
    (そうなら対策はフィールド長を増やすか、書き込む文字列長に上限をかませればいい気がするが…… 0x200/3 = 170.66 だから 170文字でカットすればはみ出さないのでは)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません