プログラムを実行すると、URLを入力するテキストボックスが表示される。
変換対象のURLを入力し[変換]ボタンを押すと、変換され、テキスト・ファイルを保存するか否かを問い合わせてくる。
変換対象のURLを入力し[変換]ボタンを押すと、変換され、テキスト・ファイルを保存するか否かを問い合わせてくる。
サンプル・プログラムの実行例

サンプル・プログラム
html2txt.php | サンプル・プログラム本体 |
バージョン | 更新日 | 内容 |
---|---|---|
1.4.0 | 2023/04/30 | OUTPUT_ENCODINGを導入 |
1.3 | 2021/02/06 | PHP8対応 |
1.2 | 2017/03/20 | PHP7対応,bug-fix |
1.1 | 2014/07/20 | HTML5対応, 大幅改訂 |
1.0 | 2005/01/11 | 初版 |
解説:HTTPヘッダ
82: //出力用HTTPヘッダ
83: header('Content-Disposition: attachment; filename=download.txt');
このプログラムも、入力と変換を1つのファイルですませるように工夫してある。
ただし、後半はテキストファイルを出力するため、HTML形式ではなくなる。そこで、前半部分にHTMLを構成する<!DOCTYPE html>~</html>をすべて入れてある。

組み込み関数 header が、テキスト・ファイルを出力するための肝である。
header は、サーバがHTMLコンテンツを送信する前に付加するHTMLレスポンス・メッセージのメッセージ・ヘッダ――HTTPヘッダ――を出力するための関数である。
"download.txt" という名前のテキスト・ファイルを、サーバからクライアントに向かって送信するには、サンプル・プログラムのように記述する。

サーバから送られてきた拡張子 ".txt" のファイルに対してクライアント側がどのように動くかについては、ブラウザの MIME 設定による。一般的なブラウザでは、ファイルを保存するようなメッセージが出る。

ここで、HTTPヘッダについて簡単に説明しておこう。
通常のHTMLコンテンツの場合、以下のようなメッセージ・ヘッダが返る(サーバはApache)。
ただし、後半はテキストファイルを出力するため、HTML形式ではなくなる。そこで、前半部分にHTMLを構成する<!DOCTYPE html>~</html>をすべて入れてある。

組み込み関数 header が、テキスト・ファイルを出力するための肝である。
header は、サーバがHTMLコンテンツを送信する前に付加するHTMLレスポンス・メッセージのメッセージ・ヘッダ――HTTPヘッダ――を出力するための関数である。
"download.txt" という名前のテキスト・ファイルを、サーバからクライアントに向かって送信するには、サンプル・プログラムのように記述する。

サーバから送られてきた拡張子 ".txt" のファイルに対してクライアント側がどのように動くかについては、ブラウザの MIME 設定による。一般的なブラウザでは、ファイルを保存するようなメッセージが出る。

ここで、HTTPヘッダについて簡単に説明しておこう。
通常のHTMLコンテンツの場合、以下のようなメッセージ・ヘッダが返る(サーバはApache)。
HTTP/1.1 200 OKこれがgifファイルだと以下のようになる。
Date: Thu, 20 Mar 2003 11:03:45 GMT
Server: Apache
Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT
Connection: close
Content-Type: text/html
HTTP/1.1 200 OKテキスト・ファイルを送る場合は、header("Content-Type: text/txt") とするだけでも十分なのだが、そうすると、保存ファイル名がphpソースと同じ名前になってしまう。
Date: Thu, 20 Mar 2003 11:03:45 GMT
Server: Apache
Last-Modified: Mon, 10 Mar 2003 05:58:20 GMT
Connection: close
ETag: "833be-ae7-383bb23c"
Accept-Ranges: bytes
Content-Length: 12345
Content-Type: image/gif
解説:HTMLタグを除く
93: //HTMLコンテンツを1行ずつ読んで処理する.
94: while (! feof($infp)) {
95: //最大MAX_LINEバイトを読み込む.
96: $str = fgets($infp, MAX_LINE);
97: //HTML および PHP タグを取り除く.
98: $str = strip_tags($str);
99: //文字コードをOUTPUT_ENCODINGに自動変換する.
100: $str = mb_convert_encoding($str, OUTPUT_ENCODING, 'auto');
101: //行頭・行末の空白文字を除く.
102: $str = trim($str);
103: //0文字以上なら出力する.
104: if (strlen($str) > 0) print $str . "\n";
105: }
ファイルを読み込む部分の流れは、以前のプログラムと同じである。
HTMLやPHPタグを取り除いて1行を読み込むのに、 fgetss を使っていたが、この関数は PHP7.3から非推奨になったため、 fgets と strip_tags 関数に置き換えた。
strip_tags 関数は、オプションで一部のタグを残しておくこともできる。table, tr, td タグのみを残しておきたいなら、strip_tags($str, "<table><tr><td>") のように記述する。

次に、入力された文字列を定数 OUTPUT_ENCODE に変換する。この処理は関数 mb_convert_encoding を使えばよい。
HTMLやPHPタグを取り除いて1行を読み込むのに、 fgetss を使っていたが、この関数は PHP7.3から非推奨になったため、 fgets と strip_tags 関数に置き換えた。
strip_tags 関数は、オプションで一部のタグを残しておくこともできる。table, tr, td タグのみを残しておきたいなら、strip_tags($str, "<table><tr><td>") のように記述する。

次に、入力された文字列を定数 OUTPUT_ENCODE に変換する。この処理は関数 mb_convert_encoding を使えばよい。
(この項おわり)
そこで今回は、インターネット上のHTMLコンテンツをシフトJISのテキスト・ファイルに変換するプログラムを作ってみることにする。
(2023年4月30日)OUTPUT_ENCODINGを導入