●半角スペース問題解決編

257 名前: ◆ H/tNiasOz2 2009/07/19(日) 22:25:54

><input type="text" name="rein" value=$line><br>

ここをvalue="$line"という風に"で括ったらスペースありでも行けそうな気がするのですが……無理でしょうか
258 名前: seren 2009/07/19(日) 22:39:43

できました!
辞書をスペースに直してアップしなおしました。

ひとつ聞いていいですか?
なんで分かったの(^ω^;
てゆうかどういう仕組みw?
259 名前: seren 2009/07/19(日) 22:42:53

metaタグのときといい、本当に助かりますわ(*゚ー゚)
260 名前: seren 2009/07/19(日) 22:54:20

んー、perlは文字列は"や'で括らなくてもいいとあったのでそうしてたけど、
括らないというのは"とも'とも違う結果になるようですね。

文字列をそのまま扱うには、""で括るという本来的なやり方が安全ということはわかりました。
261 名前: ◆ H/tNiasOz2 2009/07/19(日) 23:17:34

perlというかhtmlの問題ですなー

perlは書いたことないので分かりませんが、
htmlのタグの値はスペースを含む場合は""で括らないといけないのは知っていたので
262 名前: seren 2009/07/19(日) 23:33:50

あぁ分かったそういうことか。

これはあくまでPerlなんですよ。
print ENDがかかってるので、実際は

print "<input type="text" name="rein" value=$line>";

なのね。

で、変数展開するのはPerlの仕事だと思ってるのね。
だからPerl側が空気読んでクォーテーションなくてもvalueに文字列を入れてくれると思ったの。

そうすると例えば$line="ern e yuuma"だとしたら、htmlとして書き出される情報は
<input type="text" name="rein" value=ern e yuuma>
となるのね。

この場合、htmlは"がなくても空気読んでvalue=ernのところまでは理解すると思うの。
だけど、その後のe yuumaはernの後にスペースがあるもんだからvalueではないと解釈する。
で、残ったe yuumaは解釈できない謎文字列としてスルーされ、エラーにはならない。
htmlはエラーになりにくい言語だから、こちらとしてはなんでernで切れてしまうのか分からない。

そこでvalue="$line"にすることで、変数展開したときに
<input type="text" name="rein" value="ern e yuuma">
となり、正しく認識されることになると。

ようやく分かりました。
263 名前: xektan 2009/07/20(月) 00:00:47

>htmlは"がなくても空気読んで
HTML の attribute は全て " " でくくるのが正式です。

>htmlはエラーになりにくい言語だから
否。
ブラウザが頑張ってるだけ。

『正しいHTML4.0リファレンス&作法』
http://www.atmarkit.co.jp/fnetwork/bookreview/01forwebpro/webdes1.html#book5
必携書。私は早い時期にこれを読んで正しい書き方が身に付いた。

『CGI&Perlポケットリファレンス』
http://www.amazon.co.jp/dp/4774107557/
CGI の作り方ではなく Perl の辞書として重宝する。
264 名前: seren 2009/07/20(月) 06:55:09

>ブラウザが頑張ってるだけ。

なるほど。ブラウザでしたか。
ということは何で見るかによって挙動が異なるわけですね。