« 更新所要時間 | トップページ | S.A.が時々、表示すらされなくなる理由 »

2006年8月 8日 (火)

ばぐった件

昨日の19時40分~50分頃でしょうか。



Skill Attack Version 3、ていうかSkill Attack開設以来の壮大なバグが発覚。



ちょうど、⊂㌍㌢!⊃さんの名前をシステムに対応すべく JavaScript をいじったりした後だったから、何か直し間違えたかな?と思ったけど、TOP画面で出力された JavaScript のエラー文を見てみる限り、どうやら事情は違うらしく。


JavaScript で、ユーザーの名前を変数に代入しようとするところで文法ミスが出ていました。該当箇所をよく見てみると、名前を囲むためのシングルクォートがエスケープされていたのですけど、何故そのような事が起こったのかというと・・・





CGIで特定の文字(表・予・申・能など)が文字化けする
http://www.shtml.jp/mojibake/sjis_cgi.html





後方エスケープ。

DDRでは、「CAN'T STOP FALLIN' IN LOVE」等のように、名前にシングルクォートが含まれる曲が数多く存在します。それらを JavaScript で変数に代入しようとする時に、そのまま 'CAN'T STOP FALLIN' IN LOVE' のように記述すると文法エラーを起こしてしまうので、PHP側で、曲名のシングルクォートを \' に変換する必要があります。


そこで、PHPの標準関数 addslashes() を取り入れてみました。エスケープが必要な文字列をエスケープしてから返してくれるので、「じゃあ、JavaScriptで代入処理させる文字は全てこれを通せばいいんじゃない?・▽・」と思ったまでは良かったのですけど・・・


この addslashes() 関数、シングルクォートやヌル文字といった前方エスケープだけでなく、「表」「ソ」「申」「十」といった、Shift_JISの2バイト目が 0x5C の文字もしっかり後方エスケープして下さいます。


以上を踏まえて。


昨日、「ナイソ」さんが新規登録されました。


JavaScript で名前を代入するために書き出された文字列は
'ナイソ\' となるわけですが・・・



ここから先の話は、またの機会に。



ちなみにその数日前、同じ 0x5C を2バイト目に持つ「十」を名前に含んだ、「A-Y(元十字)」さんが登録を行っていたにも関わらず何も起こらなかったのは何故でしょう。


厳密には少し違いますが、大まかに説明すると以下のような理由です。

http://www.shtml.jp/mojibake/sjis_cgi.html

では、「print "私の名前は田中太\郎です。";」とすると、どう表示されるでしょうか? ここでは、「\マーク」は無視され、「私の名前は田中太郎です。」と出力されます。エスケープが必要のない文字の前に「\マーク」をつけても無視されるわけです。



最後に、今回の件で勝手に名前を挙げてしまいましたが、
ナイソさんやA-Y(元十字)さんは全く悪くないんで!

そこだけは間違いの無いようお願いします。

|

« 更新所要時間 | トップページ | S.A.が時々、表示すらされなくなる理由 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/120346/2984049

この記事へのトラックバック一覧です: ばぐった件:

» 変な胸騒ぎ [現役女教師奈保美]
六月に入って少し疲れ気味だったと言う事が原因かもしれませんが、私がうかつでした。六時間目の授業が終わり、職員室に向かい階段を登っていた時のことです。 [続きを読む]

受信: 2006年9月 8日 (金) 05時38分

» 共感してくれる人がいるって事 [優希]
ブログを始めて良かったと思う事は私と同じように悩んでる人、私と言う人間を知ろうとしてくれる人に本当にちっぽけで、何も出来ない私でも知ってもらえる価値がある、生きてる意味がある、そう思える瞬間がある事・・・・ [続きを読む]

受信: 2006年9月 8日 (金) 06時14分

« 更新所要時間 | トップページ | S.A.が時々、表示すらされなくなる理由 »