• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:rubyのmarkabyの出力の件です)

rubyのmarkabyの出力でHTMLソースが正しく表示されない

このQ&Aのポイント
  • rubyでmarkabyを使用してHTMLソースを出力すると、表示が異なる問題が発生しています。
  • ブラウザでの表示は正常ですが、HTMLソースの状態で表示すると文字化けしています。
  • Iconvを使用して文字コードを変換してみましたが、うまくいきませんでした。

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

1.8.6環境は手元に無いのですが、1.8.7で同様の症状を確認しました。 ソース覗いた限り、markabyが依存しているbuilderライブラリ側の仕様っぽいですね。 String#encode有るか無いか(≒1.9系か否か)を分岐に、動作を大きく振り分けています。 試しに、最初貼られたコード内「require 'markaby'」の直後に次の5行を加えてみて下さい class String def to_xs(_=nil) self end end 多分望みの出力になったと思いますが、エスケープ処理全てすっ飛ばしている状態なので現実的ではありません。 ということで、自分からの結論は下記とします。 推奨: 1.9系への移行 次点: 1.8系のまま最後のstrを処理(ANo1)する

yn0323
質問者

お礼

sholmes 様 class String...endを張り付けて動作確認出来ました こちらの方も望みどうりの出力になりました。ありがとうございました。 今回 ご教授いただきました次点の策でいこうと思います。 このスクリプトを流用して、 見出し,リンク先,画像名のデータが入ったdatafileを作っておいて それをこのmarkabyをとおしソースを出力しあとは手動にてhtmへ コピペするようなツールとして使用する予定なのでこの状態で今は 十分です。 ページ全体をこれで作るのはまだまだ勉強と工夫が いるようです。 わかりやすいご教授たいへんありがとうございました。

その他の回答 (1)

  • sholmes
  • ベストアンサー率81% (89/109)
回答No.1

Ruby1.9.2とmarkaby0.7.2環境下では、そういった症状が見られませんでした。 この環境が利用可能なのであれば、変更してみて下さい そうでなければ、現行環境を記載することで識者の回答があるかもしれません。 <おまけ> 最終出力を得たいだけであれば、最後のstrにこういったgsubを掛けても良いと思います。 http://ideone.com/eV1XX ただ、ちゃんとしたサービスに用いるのであれば「HTMLEntities for Ruby」等のライブラリを使って下さい。

yn0323
質問者

お礼

ご教授ありがとうございまた 出力できました! markabyをつかっていろいろhtm作成するツールにしようと 思います ちなみに環境ですがruby1.8.6 markaby-0.7.2 です 日本語をあつかうのはruby1.9がよさそうなのでそちらへ バージョンアップしたいのですが1.8で書いたツールが つかえなくなると困るのでなかなかふんぎりがつきません でもgsub!(/&#(\d+?);/){[$1.to_i].pack 'U'}で出来ることが わかったので大変たすかりました ありがとうございました。 require 'rubygems' require 'markaby' require 'iconv' html = Markaby::Builder.new do head { title 'マイホームページ'} body do h1 "ようこそ" b "項目" ul do li "ライン1" li "ライン2" li "ライン3" end end end str = html.to_s str.gsub!(/&#(\d+?);/){[$1.to_i].pack 'U'} puts Iconv.conv('Shift_JIS','UTF-8',str)

関連するQ&A