【MENU】
【文字列に含まれるhtml特殊文字をチェックして警告・代替・削除する】
◆データベースの入力フォームにおいて、サーバー側でも文字エスケープの処理を行うが、入力時点でjavascript によりhtml特殊文字をチェックする。
[html特殊文字]:<>&”(←は全角で記述しているが実際は半角文字)
◆javascript Tips
f=0:警告のみ
f=1:対象文字を別の文字に置き換え(<→[,>→],&→*,"→#)
f=2:対象文字を強制的に削除
function fnHtmlspecialchars2(strR,f){
//strR:検査する文字列
var strR2="";
var strAction=0;
var g;
var strCom;
var InputVal='<>&,"'; //html特殊文字リスト
for(i=0;i<strR.length;i++){
g=strR.charAt(i);
if (InputVal.indexOf(g,0)>=0){
strAction=1;
if(f==0){
strR2=strR2 + g; //何もしない
}else if(f==1){
switch(g){
case '<':
strR2=strR2 + g.replace(g,'[');
break;
case '>':
strR2=strR2 + g.replace(g,']');
break;
case '&':
strR2=strR2 + g.replace(g,'*');
break;
case '"':
strR2=strR2 + g.replace(g,'#');
break;
default:
strR2=strR2 + g.replace(g,'?');
break;
}
}else{
strR2=strR2 + g.replace(g,""); //対象文字削除
}
}else{
strR2=strR2 + g;
}
if(strAction==1){
if(f==0){
alert(' html特殊文字( < > & " \\ \')等が入力されていますが、操作は継続できます。');
}else{
if(f==1){
strCom='html特殊文字を入力することはできません。自動的にこれらの文字を (<→[)(>→])(&→*)("→#) に置き換えます。操作中止する場合は[キャンセル]を選択して下さい。';
}else if(f==2){
strCom= 'html特殊文字を入力することはできません。自動的にこれらの文字を削除します。操作中止する場合は[キャンセル]を選択して下さい。';
}
if(!confirm(strCom)){
return strR;
}else{
return strR2;
}
}
}else{
return strR; //特殊文字がない
}
}
(DataID:000012)
【文字列に指定した文字が含まれているなら警告する】
◆javascript tips
//strR:文字列
function fnWordCheck(strR){
var InputVal="ABCDE"; //許容されない文字
var g;
for(i=0;i<strR.value.length;i++){
g=strR.value.charAt(i);
//InputValリストの文字が使用されていればエラー警告
if(InputVal.indexOf(g,0)>=0){
alert(" 使用できない文字が入力されました。");
return false;
}
}
}
◆許容されない文字が入力されたとき、代替文字に置き換えるか、強制的に削除するか等が選択できるようにすると使い勝手がよい。
(DataID:000008)
【文字列の前後の半角空白を削除する】
◆データベースを活用しているとどうしてもvbscriptのtrim()関数が欲しくなります。javascriptで同様の機能を実行できます。
◆javascript Tips
//strR:文字列(入力) strR2:文字列(出力)
function fnTrim(strR){
var i=0;
var strR2;
while(i<strR.length){
if(strR.substring(strR.length-1,strR.length)==" "){
strR2=strR.substring(0, strR.length-(i+1));
}else{
break;
}
i++;
}
return strR2; //strR2を戻り値として返す
}
(DataID:000006)
【文字列の半角空白を有効にするため、半角空白を&nbsp; に代替えする】
◆ブラウザによっても異なるようですが、データベースやファイルを読み込んだとき、行頭にある半角空白が無視されて表示されることがあります。文字をインデントしたいのにこれでは具合が悪い。読み込んだとき文字列の半角空白を &nbsp;(html代替文字・全角で記述・実際は半角文字)に代替えすると、半角空白が有効になります。
(データベース・ファイルのデータ)
あいうえお(半角空白4文字が行頭に付加されている)
↓
(何も処理しないと)
あいうえお(半角空白4文字が行頭に付加されている)
↓
(この記事に記載された方法で処理すると)
あいうえお(半角空白4文字が行頭に付加されている)
◆javascript Tips
//strR:文字列(入力) strR2:文字列(出力)
function fnStrChange_xx(strR){
var strR2="";
strAction=0;
for(i=0;i<strR.length;i++){
g=strR.charAt(i);
if(g==" "){
strAction=1;
strR2=strR2 + g.replace(g,"&nbsp;");
// &nbsp;は全角文字で記述→半角に変える
}else{
strR2=strR2 + g;
}
}
if(strAction==1){
return strR2;
}else{
return strR;
}
}
◆メモ
※インデント(字下げ)するのに全角空白を使う---この方法を多用してきたのだが---と、一部のブラウザでは表示が乱れる原因となるらしい。
※この記事に記載した機能を得るためにHTMLに<pre>〜〜</pre>を用いてみたが、枠内で自動的に改行されない(枠外にまで表示される)等の問題が生じた(IE7.0)ので、採用しなかったという経緯あり。
(DataID:000013)
【変数の型を調べる()javascript】
◆tips
[javascript]
strR2:戻り値
strR:入力値
strR2=typeof(strR);
[型]
strR2="string":文字列
strR2="number":数値
strR2="object":オブジェクト
(DataID:000080)