[三流君] −−> [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でした。

フィードバック

ASP系の→[掲示板]←を覗く、質問を書き込む

評価・感想

No.017を読んだ満足度(評価)は?
5満足(参考になった)
4まぁまぁ(一部参考になった)
3普通(どちらとも言えない)
2なんかなぁ(期待と違った)
1不満(読んで損した気分)
作者に感想・質問を送る場合は下記に気軽に書いてください
あなたのお名前(ニックネーム) さん

作者からの返信は、 不用 E-mail で受信したい
*質問・感想はメルマガで紹介する場合があります

三流君の主なリンク先

[アクセスランキング] [サイトマップ] [リンク先・相互リンク先など]
ASPで遊ぶ、失敗する 掲示板 バックナンバー 登録と解除
三流プログラマー 業務の愚痴 掲示板 バックナンバー 登録と解除
VBAで楽しくプログラミング 掲示板 バックナンバー 登録と解除
コンビニのオモテとウラ話 掲示板 バックナンバー 登録と解除
www.ken3.org(サイト内)から Google を利用して、

Ken3の日記(weblog) -- [広告・副収入系] [プログラマー業務の愚痴] [VBA系の話題] [ASP系の話題] [コンビニ系ネタ] [その他]

その他 宣伝広告