重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (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>

解析も勉強のうちですので、頑張って解析してくださいね。
下記のサイトも勉強には欠かせません。

この回答への補足

ご回答ありがとうございます!早速試して、実行できました。
早急に解決しなければならない問題だったので、とても助かりました。
本当にありがとうございます。

ただ、後ひとつだけ質問してもよろしいですか?
今現在、入力フォームの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スクリプトの
呼出を加えるとすると、どのように記述したらよいのでしょうか・・・。
何度も申し訳ありませんが、ご教授いただけると幸いです。
どうか、よろしくお願いいたします

補足日時:2001/11/07 16:24
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/11/07 18:03

置き換えに関しては、下記のようにすればできます。



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に関しては、ブラウザによって動作が異なる可能性があります)
    • good
    • 0
この回答へのお礼

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

本当にありがとうございました!

お礼日時:2001/11/07 18:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!