<中身を表示、Server.HTMLEncodeでソースの表示> こんにちは、Ken3です。 前回までのギャグは、 世の中、外見、外見、男性も化粧する時代(オイオイ、ホントか?) でした。 今回は、 男も女も隠し事しないで中身を表示 です。 あまり期待しないでね。 /* * 1.読者からのご意見は新たなネタになるから歓迎ですね */ 下記、読者メールの一部引用です。 In message "感想", *****8さん wrote... >広告見せるならソース見せろ なるほど、作者の小金稼ぎをみごとに指摘されましたね。 小金っていっても、クリックだけだと稼げないのが現実。 *一日1〜2クリックあればいいほうかなぁ。 そっか、それなら実行結果とソースファイルを一緒に見せるほうが、 読者が来てくれるページになるよね。 今回は、そんな思いから、 男も女も隠し事しないで中身を表示です。 寒いよ三流君、、、そんなタイトル考えてないで、 中身を充実させてよ。 はい、了解です。 (くだらないタイトル、言いまわしのファンってヤッパ居ないのかなぁ) /* * 2.簡単な方法 */ 私がバックナンバーのページでやってるんだけど、 ソースをテキストエディターに貼りつけて、 <HTML>の<を&lt;に>を&gt; と置き換えて、 &lt;HTML&gt; みたいにしてから、 <PRE> &lt;HTML&gt; </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記事 バックナンバー目次]