WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:aspのinstr関数について

0:[投稿] スライムadmin [2004/12/10 19:16 ][環境:WIN2000 IE6 Win2000 IE6]

お世話になります。

ASPでinstr関数を使い、
「'」シングルコーテーション
「"」ダブルコーテーションの位置を検索したいのですが、
検索が出来ません。

エスケープしないといけないようなのですが、
やり方がわかりません。
どなたかやり方をご存知ないでしょうか。


1:[回答] andi [2004/12/11 22:57 ]

実際にどのようにコーディングしたのでしょうか?


2:[回答] スライムadmin [2004/12/12 14:55 ]

   Dim IStrCHK
  STRData = "ABCD'EFG"
   IStrCHK = InStr(STRData,"'")
   
   これだと、本来はIStrCHKに5が入らなければ
  いけないと思いますが、NULLが返って来ます。
  エスケープしようとして下記のように記述すると、
  エラーで処理が行われません。

   IStrCHK = InStr(STRData,""'"")

  以上、宜しくお願い致します。


3:[回答] andi [2004/12/12 20:36 ]

> Dim IStrCHK
> STRData = "ABCD'EFG"
> IStrCHK = InStr(STRData,"'")

aspを動かす環境が無いので取り敢えずvbsで動作させた所、
普通に5が返って来ていました。
IStrCHKに入れず直接出力してみたりしても駄目でしょうか。

所で、2行目に全角スペースが入っていましたが、
これはここにコピーした時に付けたんですよね?


4:[回答] スライムadmin [2004/12/13 10:17 ]

2行目の全角スペースはここにコピーしたときに付いたものと思います。今回のエラーとは無関係です。
それから、説明が足りなかったのですが、

STRData = "ABCD'EFG"

の"ABCD'EFG"の部分は今回わかりやすくする為に
文字列を打ち込みましたが、
本当はその部分は変数になっていて、
前ページからPOSTで渡されたデータが入るようになっています。
きちんと説明しなくて申し訳ありませんでした。
処理は以下のように流れます。

@Web画面へ文字入力→APOSTで次ページへ移り、
その文字を再表示(この画面でInStrによるチェックが行われる)
→BもしInstrによってシングル、またはダブルコーテーションが
見つけられれば、@の画面へ戻る。その際、@の文字入力テキストにはエラーを出した文字列が表示される

前ページからデータを受け取り、
InStrでチェックをしている部分↓

  STRData = Trim(Request.form("STRData_txt"))
   IStrCHK = InStr(STRData,"'")
   If IStrCHK <> "" then
       Cの処理
   End If

実際は上記のように記述しています。
今日もう一度変数名を変えたりして試したところ、
"'"(シングルコーテーション)に関しては値が返って来ました。
しかし、Cで表示されるはずの文字列が、変形して表示されてしまいます。
EX
ABC'DEFG→ABC

また、ダブルコーテーションは相変わらずチェックに組み込もうとするとエラーが出てしまいます。


5:[回答] andi [2004/12/13 10:36 ]

> 今日もう一度変数名を変えたりして試したところ、
> "'"(シングルコーテーション)に関しては値が返って来ました。

貴方の単純ミスだったということでしょうか?
それとも他の原因でしたら後学の為に原因を公開して下さい。

> Cで表示されるはずの文字列が、変形して表示されてしまいます。

実際にどのようにコーディングしたのでしょうか?(再掲)
例えばResponse.Writeだけかもしれませんが、それは貴方にしか分かりません。
あまり情報を小出しにしないで下さい。

> ダブルコーテーションは相変わらずチェックに組み込もうとするとエラーが出てしまいます。
> IStrCHK = InStr(STRData,""'"")

"のエスケープは""です。従ってInStrの第二引数は""""になると思います。


6:[回答] スライムadmin [2004/12/14 10:40 ]

>従ってInStrの第二引数は""""になると思います。

有難うございます。「""""」で出来ました!

>貴方の単純ミスだったということでしょうか?

おそらく私の単純ミスかと思われます。

>実際にどのようにコーディングしたのでしょうか?(再掲)

はい。まず昨日の訂正があります。

@Web画面へ文字入力
→APOSTで次ページへ移り、
その文字を再表示
→Bチェックのボタンを押下すると、Instrによる対象文字チェックが行われます。
→C'(コーテーション)がみつかれば、エラーメッセージを出して、再度データをA画面に表示します。

この、Bのチェックは、Bソースを自分でもう一度呼び出して、その中で行っております。↓
function chkBut_Push(){
    document.userinfo.申請ボタン押下済フラグ.value="1";
    document.userinfo.action="Bのソース.asp";
    document.userinfo.method="POST";
    document.userinfo.submit() ;
}

POSTされた文字データを、再びB画面のソースで受け取り、申請済押下フラグが1であればチェックを行います。

IStrCHK = InStr(STRData,"'")

そこで'(コーテーション)がみつかれば、次の画面には進まず、B画面をそのまま表示します。
その際の文字の表示が、コーテーション以下消えてしまいます。

色々調べてみようと思っているので、
原因がわかったらまた連絡いたします。

失礼致します。


7:[回答] andi [2004/12/14 14:29 ]

> おそらく私の単純ミスかと思われます。

別に責めたりはしませんから、はっきりして下さい。
問題個所を一つずつ確実に潰していきましょう。

> はい。まず昨日の訂正があります。
(以下略)

問題点がどんどん漠然としてきていると思いますが・・・
きちんと問題個所を特定してから投稿して下さい。


8:[回答] スライムadmin [2004/12/17 16:02 ]

>別に責めたりはしませんから、はっきりして下さい。

IStrCHK = InStr(STRData,"'")
に対して最初に現れていた事象は、
無反応でした。
これに関してはその後無反応という事象は現れていません。
その為、原因がはっきりしません。

無反応の次に現れた事象は、
Webブラウザに表示される文字列が欠けてしまう事象です。

<%
Dim STRData
Dim IStrCHK

'POSTで前画面からSTR_Dataをもらう
'ここでは"ABCD'EFG"が値として入っているものとする
STRData = Trim(Request.form("STR_Data")(1))

'InStr関数を用いて"'"シングルコーテーションチェック
IStrCHK = InStr(STRData,"'")

'画面へ表示する
WK_HTML = "
<TD align='left' bgcolor='#ffffff' name='STR_Data'>" & STRData & "</TD>"
Response.Write(WK_HTML)
'"ABCD'EFG"→"ABCD"
'データが欠けてWebブラウザに表示される。
%>

と、こういった感じです。


9:[回答] andi [2004/12/17 16:12 ]

> <<<<<<<
> STRData = Trim(Request.form("STR_Data")(1))
> <<<<<<<
> IStrCHK = InStr(STRData,"'")
> <<<<<<<

上記の<<<<<<を追加した個所にRequest.form("STR_Data")、STRDataの値は正しく入っていましたか?

それぞれResponse.Writeまたはステップ実行するなりして確認はしてみましたか?
(どこで問題が発生しているのかを確認する必要があります)


10:[回答] スライムadmin [2004/12/21 16:55 ]

御返信、遅れて申し訳ございません。
下記の@〜BにResponse.Writeで値を画面に
表示してみました。

> <<<<<<< @
> STRData = Trim(Request.form("STR_Data")(1))
> <<<<<<< A
> IStrCHK = InStr(STRData,"'")
> <<<<<<< B

@のSTRDataの値は「""」です。
AのSTRDataの値は「"ABCD"」です。
BのSTRDataの値は「"ABCD"」です。

以上のように、データを前画面からPOSTで
引き継ぐ際に既に「'」コーテーション以下の
データは消失しているようです。

もう少し詳しく調べるつもりです。
進展があったら連絡いたします。


11:[質問] スライムadmin [2004/12/27 18:38 ]

「'」シングルコーテーション
のデータの受け渡しが
ASPの中では上手く出来ないようなのですが、
何か上手い方法はないものでしょうか。

コード化して渡す方法もあるそうなので、
ASP内ではそれをやるしかないのでしょうかね。

ASPではなく、
Javascriptで「'」シングルコートのチェックが出来ました。

<script language="JavaScript">
STRData="ABCD'EFG"
n1 = STRData.indexOf("'", 0);
if (n1 != -1){
    alert("シングルコーテーションが含まれています。");
}
</script>

これで、OKでした。
ただ、今度は「"」ダブルコーテーションのチェックが出来なくなってしまいました。

<script language="JavaScript">
STRData="ABCD"EFG"
n1 = STRData.indexOf("""", 0);
if (n1 != -1){
    alert("ダブルコーテーションが含まれています。");
}
</script>

エラー:';'がありません

どなたか正しい「"」ダブルコートのエスケープを教えて下さい。
宜しくお願い致します。


12:[完了] スライムadmin [2004/12/27 21:04 ]

自己解決しました!

<script language="JavaScript">
STRData="ABCD"EFG"
n1 = STRData.indexOf('"', 0);
if (n1 != -1){
   alert("ダブルコーテーションが含まれています。");
}
</script>

これでOKですね!


13:[完了] AC1号 [2004/12/27 22:32 ]

>>11,12
一体あなたは何を勉強したいのですか?
ASPを勉強したいのですか?JavaScriptを勉強したいのですか?
>>12ではうまくいかないはずですが、スレッドの最初の趣旨を逸脱するので、今回はあえて回答を書きません。

>>10
POSTする前の画面を「Webブラウザ」で開いて、「ソースを見る」機能で、「HTML」のソースを確認してください。おそらく<input value='ABCD'EFG'>みたいなおかしなHTMLになっているはずです。
・属性値を囲む際は必ず"(ダブルクォート)を使うこと。
・Server.HTMLEncode関数でダブルクォートなどをエスケープすること。
の2つを行って下さい。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World