<中身を表示、Server.HTMLEncodeでソースの表示>
こんにちは、Ken3です。
前回までのギャグは、
世の中、外見、外見、男性も化粧する時代(オイオイ、ホントか?)
でした。
今回は、
男も女も隠し事しないで中身を表示
です。
あまり期待しないでね。
/*
* 1.読者からのご意見は新たなネタになるから歓迎ですね
*/
下記、読者メールの一部引用です。
In message "感想",
*****8さん wrote...
>広告見せるならソース見せろ
なるほど、作者の小金稼ぎをみごとに指摘されましたね。
小金っていっても、クリックだけだと稼げないのが現実。
*一日1〜2クリックあればいいほうかなぁ。
そっか、それなら実行結果とソースファイルを一緒に見せるほうが、
読者が来てくれるページになるよね。
今回は、そんな思いから、
男も女も隠し事しないで中身を表示です。
寒いよ三流君、、、そんなタイトル考えてないで、
中身を充実させてよ。
はい、了解です。
(くだらないタイトル、言いまわしのファンってヤッパ居ないのかなぁ)
/*
* 2.簡単な方法
*/
私がバックナンバーのページでやってるんだけど、
ソースをテキストエディターに貼りつけて、
<HTML>の<を<に>を>
と置き換えて、
<HTML>
みたいにしてから、
<PRE>
<HTML>
</PRE>
とPREのタグで処理してます。
この処理を同じくやって、ASPの後ろに貼り付けるのって、
なんかバカらしいよね。
三流君らしいけどね。
グサっとくるなぁ、
よし、
ASPのソースファイルを読んで、
置きかえるかぁ。
/*
* 3.置き換えの関数を探していたら、Server.HTMLEncodeと出会う
*/
ボクは、置き換えの関数お嬢を探してました。
そしたら、途中で、
Server.HTMLEncode 関数(お嬢さん)
と運命的な出会いをしました(なんだかなぁ)
この関数、
<>などを変換して、結果を返してくれます。
置き換え処理を作るより楽だったので、
この関数を使ってみます。
使い方は簡単で
Server.HTMLEncode("文字列")
で
変換結果を返してくれます。
/*
* 4.サンプルの作成
*/
-- test017-1.asp --
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>html asp のソースを表示したい Server.HTMLEncode</title>
</head>
<body>
<h2>html asp のソースを表示したい Server.HTMLEncode</h2>
test017-1.asp<br>
<hr>
Server.HTMLEncode(文字列)で、変換された結果<br>
使用例)Response.Write Server.HTMLEncode(strDATA)<br>
<hr>
<%
' FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
' tset017-1.asp を読取専用モードで開きデータを読む
Set ts = objFS.OpenTextFile(Server.MapPath("test017-1.asp"), 1, True)
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループ
strDATA = ts.ReadLine 'ファイルからデータを一行を読む
'*1読み込んだデータをServer.HTMLEncodeで変換表示
Response.Write Server.HTMLEncode(strDATA)
Response.Write "<BR>" '改行のタグを入れる
Loop
'使ったファイルは閉じようよ
ts.close
%>
<hr>
</body>
</html>
---
ポイントは得に無く、
strDATA = ts.ReadLine 'ファイルからデータを一行を読む
'*1読み込んだデータをServer.HTMLEncodeで変換表示
Response.Write Server.HTMLEncode(strDATA)
Response.Write "<BR>" '改行のタグを入れる
読みこんだ1行を
Server.HTMLEncode(strDATA)
で変換表示、
改行のタグを入れて完成です。
http://www.ken3.org/cgi-bin/test/test017-1.asp
をテストで実行すると、
おっ、ソースが下に表示されるよ。
なんかしっくり来ないよね。
あっ、三流君らしいところ発見。
なに?どこ?
ソースの字下げで使っているスペースがとれてるよ。
あっ、ホントだぁ。<PRE>で囲うのか、なんかイヤだけど。
あと、これを全てのASPファイルに追加するんだぁ。
そのつもりだけど。
だったら、関数化したり、後ろに持って行ったり、
変更ヵ所少なくする工夫をしたら
/*
* 5.関数化
*/
わかったよ、関数化して、</body></HTML>の前に呼ぶことにするよ。
-- tset017-2.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>ソースの表示関数を後ろにプラスする Server.HTMLEncode</title>
</head>
<body>
<h2>ソースの表示関数を後ろにプラスする Server.HTMLEncode</h2>
test017-2.asp<br>
<hr>
Server.HTMLEncode(文字列)で、変換された結果<br>
使用例)Response.Write Server.HTMLEncode(strDATA)<br>
<% Call OUT_SRC() '*4ソースの表示関数を呼ぶ %>
</body>
</html>
<% '*3ソースの表示関数 SUB OUT_SRC() を作成
Sub OUT_SRC()
'見出しの表示
Response.Write "<HR><h3>test017-2.asp ソース</h3><HR>"
Response.Write "<PRE>" 'スペースを有効にするため
' FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
' tset017-2.asp を読取専用モードで開きデータを読む
Set ts = objFS.OpenTextFile(Server.MapPath("test017-2.asp"), 1, True)
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループ
strDATA = ts.ReadLine 'ファイルからデータを一行を読む
'*1読み込んだデータをServer.HTMLEncodeで変換表示
Response.Write Server.HTMLEncode(strDATA)
Response.Write "<BR>" '改行のタグを入れる
Loop
'使ったファイルは閉じようよ
ts.close
Response.Write "</PRE>" 'ここまで
Response.Write "<HR>" '<HR>で区切る
End Sub '関数はここまでですよ。
%>
よし、これでOKと。
料理のポイントは、
<% '*3ソースの表示関数 SUB OUT_SRC() を作成
Sub OUT_SRC()
で、
関数を後ろに追加して、
<% Call OUT_SRC() '*4ソースの表示関数を呼ぶ %>
</body>
</html>
と、
終了前に呼んだしね。
http://www.ken3.org/cgi-bin/test/test017-2.asp
をテストで実行すると、
おっ、スペースも表示されてるし、OKかなぁ。
何か変?じゃない。空白行が表示されて無いよ。
あっ、ホントだ。
<PRE>にしたから<BR>が効かなくなってる、
これを実際の改行に変えないとマズイみたい、
ゴメンネ。
あとさ、
これってさ(この関数って)、
test017-2.aspからtest018-1.aspとかファイル名変わったら、
関数の固定値も変えるの?
そうだよ。それくらいはやってよ。
えっ?汎用の関数じゃないでしょそれじゃ。
/*
* 6.環境変数から自分の名前を取得する
*/
アナタの名前は何ですか?
Ken3だよ。
じゃなくって、ASPファイルの名前だよ。
そんなの書いた時に決めてるから不明だよ。
だからその時に書き換えてよ。
これだよ三流作者は。。。
テメエが書いた、
In message "[ASPで遊ぶ No.007] - ブラウザ(端末情報)をGetする",
mag2 ID 0000099248さん wrote...
>Request.ServerVariables("HTTP_USER_AGENT")
>Request.ServerVariables("REMOTE_ADDR")
>で値の取得は、なんとなくわかったけど、
>そのほかにどんなの?あるの?
>
>う〜ん、私もよくわからないので、
>For Each でServerVariables の名前を 表示してみました。
>
>http://www.ken3.org/cgi-bin/test/test007-2.asp
>をテストすると下記のようになります。テスト結果は、(長いです)
>
>PATH_INFO↓
>/cgi-bin/test/test007-2.asp
>
>PATH_TRANSLATED↓
>d:\users\ken3_org\cgi-bin\test\test007-2.asp
>
>QUERY_STRING↓
>
>SCRIPT_NAME↓
>/cgi-bin/test/test007-2.asp
---
途中カットしたけど、
使えそうな環境変数あるんじゃないの?
http://www.ken3.org/cgi-bin/test/test007-2.asp
が環境変数を表示するサンプルです。
使えそうな値、再度確認しますか。
SCRIPT_NAME
ってのが、使えそうなので、使ってみます。
Request.ServerVariables("SCRIPT_NAME")
で値が取れるから、
-- test017-3.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>Request.ServerVariables("SCRIPT_NAME")を使用</title>
</head>
<body>
<h2>Request.ServerVariables("SCRIPT_NAME")を使用</h2>
test017-3.asp<br>
<hr>
Request.ServerVariables("SCRIPT_NAME")=
<%=Request.ServerVariables("SCRIPT_NAME")%>
<% Call OUT_SRC() '*4ソースの表示関数を呼ぶ %>
</body>
</html>
<% '*3ソースの表示関数 SUB OUT_SRC() を作成
Sub OUT_SRC()
Dim strSCR_NAME
strSCR_NAME = Request.ServerVariables("SCRIPT_NAME") '名前を代入
'見出しの表示
Response.Write "<HR><b>" & strSCR_NAME & "</b><HR>"
Response.Write "<PRE>" 'スペースを有効にするため
' FileSystemObjectを生成します、、って英文、そのままジャン。
Set objFS = Server.CreateObject("Scripting.FileSystemObject")
'*5 スクリプト(strSCR_NAME)を読取専用モードで開きデータを読む
Set ts = objFS.OpenTextFile(Server.MapPath(strSCR_NAME), 1, True)
Do While ts.AtEndOfStream = False 'ファイルの終端になってない間ループ
strDATA = ts.ReadLine 'ファイルからデータを一行を読む
'*1読み込んだデータをServer.HTMLEncodeで変換表示
Response.Write Server.HTMLEncode(strDATA)
Response.Write chr(13) & chr(10) '改行する
Loop
'使ったファイルは閉じようよ
ts.close
Response.Write "</PRE>" 'ここまで
Response.Write "<HR>" '<HR>で区切る
End Sub '関数はここまでですよ。
%>
--
修正ポイントは、
strSCR_NAME = Request.ServerVariables("SCRIPT_NAME") '名前を代入
で、Request.ServerVariables("SCRIPT_NAME")の値、スクリプト名を保存し、
'*5 スクリプト(strSCR_NAME)を読取専用モードで開きデータを読む
Set ts = objFS.OpenTextFile(Server.MapPath(strSCR_NAME), 1, True)
で、そのファイルを開いて、処理してます。
これなら、関数をコピーするだけで、
自分自身の名前は、
Request.ServerVariables("SCRIPT_NAME")
から取得するので、
プログラムの変更が無くてすみます。
ここまで来るの、長かったね。
読者は途中でメールゴミ箱じゃない?
えっ、、、そんなぁ(笑)
http://www.ken3.org/cgi-bin/test/test017-3.asp
でテストできます。お時間の有る人は試してください。
/*
* 7.終わりの挨拶
*/
今回は、
・クレーム、広告表示するならソース表示しろ(そんなにキツクは無かったけど)
・Server.HTMLEncode 関数 で 変換してみた
・Request.ServerVariables("SCRIPT_NAME")で名前を取得
でした。
修正の少ないプログラム作成でヒントになれば幸いです。
今日も逃げるようにサヨナラかな。
最強ページへの道のりは遠いなぁ〜。
またね(笑)
何か質問・感想があったら、気軽に、
メール、掲示板に書き込んでくださいね。
三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。

下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
広告:
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]