piapia123
ja

HTML からバックエンド言語の出力コードへ

Web

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

HTML の断片を ASP・VB.NET・JSP・PHP・Perl の出力ステートメントに変換します。手作業で厄介なのは引用符よりも、それぞれ気づきにくい落とし穴のほうです。VB 系は引用符を 2 つ重ね、C 系はバックスラッシュで逃がす —— 間違えると画面が真っ白になります。PHP の二重引用符の中ではドル記号が展開されるため、価格を含む HTML が一部欠けたまま出力されます。そして JSP の文字列中の `%>` や PHP の `?>` はスクリプトブロックを途中で閉じてしまい、それ以降の HTML がそのままページ本文として表示されます —— JavaScript に HTML を埋め込むときの `</script>` と同じ事故です。ここではすべて言語ごとの規則で処理し、表現できない部分は生成コードのコメントに明記します。

機能

  • 5 つの出力先:ASP(VBScript)、ASP.NET(VB.NET)、JSP、PHP、Perl
  • 引用符は各言語の流儀でエスケープ:VB 系は 2 つ重ね、PHP・Perl・JSP はバックスラッシュ
  • PHP と Perl のドル記号、Perl の @ をエスケープし、変数展開されないようにする
  • 文字列中の %> は %\>、PHP の ?> は \x3f> と書き、スクリプトブロックが途中で閉じないようにする
  • 1 行につき 1 ステートメントを生成し、改行をそのまま保つ(HTML が 1 行に潰れない)
  • 改行は常に \n を使い、println のようなプラットフォーム依存の書き方はしない
  • CRLF と LF のどちらも受け取り、出力は LF に統一
  • 空行と末尾の改行を忠実に扱う(余分なステートメントも、欠けも出さない)
  • コメントは英語 —— .jsp や .php のファイルに入るため
  • 出力はシンタックスハイライト付きで、まとめてコピーできる

使い方

  1. 出力したい HTML を貼り付ける
  2. 出力先の言語を選ぶ
  3. 内容に終了タグが含まれないと確信できる場合のみ、終了タグの分断をオフにする
  4. 生成されたステートメントをテンプレートファイルに貼る

よくある質問

なぜ 1 行ずつ出力するのですか?まとめて 1 つの文字列ではだめですか?
テンプレートにそのまま貼れて、行単位で追えるのがこの形だからです。まとめたほうが短くはありますが、各言語の複数行文字列の仕組み(PHP と Perl のヒアドキュメント、VB の文字列連結)が必要で、5 言語で書き方が異なります。さらにエスケープが 1 箇所でも崩れると、長い塊の中から該当行を探すことになります。1 行 1 ステートメントなら、壊れた行がそのままその行です。
各行の後ろに & vbLf や \n が付くのはなぜですか?
これらの出力文は自分では改行を足さないからです。Response.Write も echo も out.print も、渡した文字列をそのまま書きます。足さないと HTML 全体が 1 行に潰れます —— ほとんどのタグでは無害ですが、`<pre>` や `<textarea>` の中の改行は内容そのものなので、失うと破損になります。入力の最終行に改行が無ければ、ここでも足しません。
PHP と Perl のドル記号がエスケープされるのはなぜですか?
この 2 言語の二重引用符文字列は展開するからです。PHP は `"$name"` を変数として展開し、Perl は `$name` と `@name` の両方を展開します。プレースホルダーや価格を含む HTML(`<b>$99</b>`、`mailto:me@example.com`)をそのまま入れると、内容が一部欠けるか、実行時に未定義変数の警告が出ます —— どちらも「データがそもそも空だった」ように見える失敗です。JSP のドル記号に特別な意味は無いので、そのままにします。
「スクリプト終了タグの分断」とは何ですか?
JSP と ASP のコードは `<% ... %>` の中に、PHP は `<?php ... ?>` の中に書きますが、テンプレートのパーサーは文字列の中かどうかを見ずに、ソース上のその 2 文字を探します。したがって `echo "<div>?>";` のような行はそこで PHP モードを抜け、以降はページ本文として表示されます —— エラーも白画面も出ず、妙な文字列がページに現れるだけです。このオプションを有効にすると、`%>` は `%\>`(これらのパーサーが解釈するエスケープ)に、PHP の `?>` は `\x3f>`(16 進エスケープ)になり、値は変わらないままソースからその並びが消えます。
生成された PHP に終了タグが無いのはなぜですか?
PHP の公式マニュアルは、ファイル全体が PHP である場合に末尾の `?>` を省くことを推奨しています。その後ろに改行や空白があると、それ自体がブラウザへ送信され、レスポンスの先頭に余計な空白が生まれます —— これが原因の「headers already sent」は有名な難物です。ASP と JSP の `%>` は必須なのでそのまま残します。
入力した HTML は送信されますか?
いいえ。変換はすべてブラウザのメモリ上で完結し、ページは一切リクエストを送りません。オフラインでも動作します。

関連ツール