プロフィール

あず/asbntby

Author:あず/asbntby
ネットゲーム「人狼」プレイヤー(最近は頻度低下中)。
人狼クローン「人狼物語」開発中。
あず開発室
自己紹介(?)

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

あずぶろぐ
とりあえずだらだらと。
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

改行コードの扱いに関するちょっと濃い話
以前ちょっと濃い話をしていたのと関連があるのですが。

これ、実は改行コードの扱いで悩んでいたのですよね。
改行を含む発言をどう処理するか、ていうのは結構厄介な問題だったりしたのです。


人狼物語は発言の際に「発言ボタンを押す → 発言プレビュー → 発言処理」という流れを通ります(これは他の長期系クローンでもだいたい同じ)。
で、発言ボタンを押した時に textarea要素の内容を非表示 input要素の属性値としてセットするのですが、この時に改行付きの発言をどうやって属性値にセットするかで悩んでいたわけです。

何も考えなかった場合↓こうなるわけです。



<input type="hidden" name="mes" value="例えば、

こういう発言とか">



流石にこれは心臓に悪いというか、ブラウザがちゃんと処理してくれるかどうかかなり怪しい。
というわけで、↓最初こうしていました。



<input type="hidden" name="mes" value="例えば、<br>こういう発言とか">



そうしたら前述の件で引っかかった。orz
で、どうしたかというと、改行コードを数値文字参照に変換して逃げました。



<input type="hidden" name="mes" value="例えば、&#13;こういう発言とか">



ところが、一部の携帯では引用符内の数値文字参照を展開してくれないらしい事が発覚。
仕方がないので、今は &#13; だけは発言処理側で通すようになっています。

※人狼物語は文字参照を問答無用で蹴り倒す仕様になっているので、例えば &heart; とか &#9825; とかはハートマークに変換されずにまんま表示されます。この辺りの話はまた気が向いた時にでも。

もっとエレガントな方法があるかもですが、思いつかないので今の所はこんな感じ。





所で、前述のちょっと濃い話を書いた時にちょっと気になっていた事があるんですが、今日やっと疑問が氷解しました。

HTML4.01 の属性値は CDATA なんですが、CDATA は文字参照を展開しない仕様になっています。つまり &lt; とかはそのまんま &lt; で解釈されるので、< には展開されません。
でも前述の通り、「<input type="hidden" name="mes" value="例えば、&#13;こういう発言とか">」 のように書くと&#13; が展開されるんですよね。これ、前回日記を書いた時「???」となっていました。

どうやら、引用符で囲んだ部分は RCDATA になるんだそうです。RCDATA は文字参照を展開するので、上記のような動作になるわけですね。これでやっと頭の中がすっきりしました。

P.S.「文字参照」「実体参照」とかの辺りの用語って SGML/XML と HTML でぐちゃぐちゃなんですが、これどうにかならないんですか。素人(私)にはわかりづらい事この上ないんですが。
スポンサーサイト
この記事に対するコメント

この記事に対するコメントの投稿














管理者にだけ表示を許可する


この記事に対するトラックバック
トラックバックURL
→http://asbntby.blog56.fc2.com/tb.php/48-253bf920
この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。