[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.017 中身を表示、Server.HTMLEncodeでソースの表示

中身を表示、Server.HTMLEncodeでソースの表示



本文(発行内容)


<中身を表示、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でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]


広告: