• ベストアンサー

入力フォーム内のタグ開始記号(<>)の置き換えについて

初めて質問させていただきます、初心者プログラマーです。 web上で使用する、質問用入力フォームを作成しているのですが、 セキュリティの問題上、入力フォーム内にタグが打ち込まれたとき それを無効化するために、タグ開始と終わりのカッコがそのまま スルーしないよう、アンパーサンドlt;とアンパーサンドgt;に 置き換える処理を行いたいと思うのですが、どのように記述したら よいのかがわかりません。この処理はフォームの入力欄全てに対して 有効にしたいのですが、どのように記述したらよいのでしょうか… どうかご教授お願い致します。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

<や>を&lt;や&gt;に変えるには、replaceメソッドを使います。 HTMLのサンプルを載せますので、参考にしてみて下さい。 (IE&NN動作確認済み。そのままコピペできます。) <HTML> <HEAD> <SCRIPT language="JavaScript"> <!-- var names = new Array('t1', 't2', 'ta'); function check() { with (document) { for (var i in names) { f[names[i]].value = f[names[i]].value.replace(/</g,"&lt;"); f[names[i]].value = f[names[i]].value.replace(/>/g,"&gt;"); } } } //--> </SCRIPT> </HEAD> <BODY> <FORM name="f"> <INPUT type="text" name="t1" size="50"><BR> <INPUT type="text" name="t2" size="50"><BR> <TEXTAREA name="ta" cols="50" rows="8"></TEXTAREA><BR> <INPUT type="button" name="b" value="check" onClick="check()"><BR> </FORM> </BODY> </HTML> 解析も勉強のうちですので、頑張って解析してくださいね。 下記のサイトも勉強には欠かせません。

Rammy
質問者

お礼

補足内に書いたallcheckの一番下に、check();の一行を記述して、 無事にすべて解決しました。 よく考えずに質問ばかりしてすみませんでした。 今後とも精進し、プログラムを自分の手でバリバリ一から書けるように がんばります。 ご回答いただき本当にありがとうございました。

Rammy
質問者

補足

ご回答ありがとうございます!早速試して、実行できました。 早急に解決しなければならない問題だったので、とても助かりました。 本当にありがとうございます。 ただ、後ひとつだけ質問してもよろしいですか? 今現在、入力フォームのsubmitボタンでonClick時処理としてすでに 以下のallcheck()を呼び出しています。 function allcheck(){ if(check_roman(document.form1.mail1.value)==false){ return false; } if(check_roman(document.form1.mail2.value)==false){ return false; } if(bytecheck(document.form1.text.value)==false){ return false; } } //allcheck内で呼び出しているスクリプト function check_roman(strTarget){ var i,transTarget; var checkStr=new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_.1234567890"); transTarget=strTarget.replace(/ /g,""); for(i=0;i<transTarget.length;i++){ if(checkStr.indexOf(transTarget.charAt(i),0)==-1){ alert("メールアドレスは半角英数字で"); return false; } } return true; } //allcheck内で呼び出しているスクリプト function bytecheck(){ txt = document.form1.text.value; n = txt.length; if (n > 2000){ alert("問合せ内容は2000文字以内で"); return false; } return true; } このallcheckスクリプトの中に、教えていただいたcheckスクリプトの 呼出を加えるとすると、どのように記述したらよいのでしょうか・・・。 何度も申し訳ありませんが、ご教授いただけると幸いです。 どうか、よろしくお願いいたします

その他の回答 (1)

noname#1785
noname#1785
回答No.1

置き換えに関しては、下記のようにすればできます。 function replaceValue(){  ver strValue=document.***.***.value;  ↑ここは、入力された値が入るように変えてください。  res1=strValue.indexOf("<",0); //文字列中から<を検索  res2=strValue.indexOf(">",0); //文字列中から>を検索  if(res1 != -1){ //該当がなければ-1が返るので   strMsg=strValue.replace("<","&lt;"); //<を<に置き換え  }  if(res2 != -1){ //該当がなければ-1が返るので   strMsg=strValue.replace(">","&gt;"); //<を<に置き換え  } } # サンプル中の"&lt;"と"&gt;"は大文字で書かれていますが、実際は小文字です。 後は、この関数をどう呼ぶかを考えてみてください。 例えば、全部入力が終わった後にボタンを押して、ならそのボタンのonClickに設定すればいいし、入力後であれば、その入力フォームのonBlurまたはonChangeに設定すればOKです。 (ただし、onBlurまたはonChangeに関しては、ブラウザによって動作が異なる可能性があります)

Rammy
質問者

お礼

ご回答ありがとうございます! とても詳しく解説してくださり、本当にありがとうございました。 おかげで、非常に参考になりました。 今後とも精進していこうと思います。 本当にありがとうございました!

関連するQ&A