• ベストアンサー

「<」や「>」を「&lt;」や「&gt;」に変換させなかったらどうなるのでしょうか?

pipipi523の回答

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.4

必要なタグだけ元に戻す処理を入れたらどうでしょう #<b>~</b> =~ s/&lt;(b)&gt;(.*?)&lt;\/\1&gt;/<$1>$2<\/$1>/gi; #<font xxx>~</font> =~ s/&lt;(font)(.*?)&gt;(.*?)&lt;\/\1&gt;/<$1$2>$3<\/$1>/gi;# ↑ 閉じられていないのにも対処。もっと上手いやり方があるかも

関連するQ&A

  • 文字実体参照が勝手に変換されてしまう

    簡単な問合せフォームを作成中に文字実体参照に変換した文字が、元に戻されてしまい困っています。簡単なサンプルを作成してみましたが、以下の様な状態です。 1.入力フォームを持ったHTMLに 「<>と&lt;と&gt;」 と入力し、xxx.cgiに渡します。 2.xxx.cgi内で入力文字列を取得し、文字実体参照に変換後<hidden>で値を保持、再度xxx.cgiに<hidden>の文字列を渡すようにします。この時点で入力値は 「&lt;&gt;と&amp;lt;と&amp;gt;」 となります。 3.再度xxx.cgiが呼ばれると、文字実体参照に変換する処理が行われる為、入力値が 「&amp;lt;&amp;gt;と&amp;amp;lt;と&amp;amp;gt;」 となるはずですが、 「&lt;&gt;と&amp;lt;と&amp;gt;」 となってしまいます(変換処理が行われているはずなのに変換されていない)不思議に思って変換前のCGIの引数を確認してみると、 「<>と&lt;と&gt;」 と文字実体参照が元に戻されてしまっています。 ちなみに文字実体参照の変換処理は$valueに対象の文字が入っているとして以下の方法で変換しています。 ---------- $value =~ s/&/&amp;/g; $value =~ s/"/&quot;/g; $value =~ s/</&lt;/g; $value =~ s/>/&gt;/g; $value =~ s/\n/<BR>/g; ---------- こういった現象についてでも何か分かるようでしたら宜しくお願いします。

    • ベストアンサー
    • Perl
  • CGI.pmでHTMLのネームエンティティを出せるか

    CGI.pmでHTMLのネームエンティティを出力できるのでしょうか。 例えばescapeHTML()は'<'や'>'を'&lt;'や'&gt;'へ変換してくれますが、 半角スペースは'&nbsp;'へ変換してくれません。 半角スペースを使いたい場合、print('&nbsp;');のように書くしかないのでしょうか。 それともCGI.pmで何か専用の関数が用意されているのでしょうか。

    • ベストアンサー
    • Perl
  • エスケープしたくない、けど、したいのもある

    とあるテキストデータ(.txt)を読み込み、それを表示するスクリプトをPHPで作りました。 その際、もしテキストデータにHTMLタグが入っている場合、そのまま出力させて、タグが有効になるようにしています。 (というかテキストを何も処理せずそのまま出力するだけ) (セキュリティ的には、テキストデータは信頼できる自サイトの同一ディレクトリに置いてあるものからしか読み込ませないようになっています) しかし、今度は逆に、もしそのテキストデータに「<hoge>」などの文字がふくまれていた場合、ブラウザはそれをタグと認識し、見えない表示になります。 本当は見えるようにそこは「&lt;hoge&gt;」と出力してほしいわけです。 かと言って、 echo htmlspecialchars($txt, ENT_QUOTES|ENT_HTML5, "UTF-8"); などエスケープして出力すると、今度はHTMLタグとして出力させたい「<br>」なども「&lt;br&gt;」として出力されてしまい都合が悪いです.. ようは、 「こんにちは<hoge><br>ほげ」 という文字列のテキストを、 「こんにちは&lt;hoge&gt;<br>ほげ」 と出力してほしい.. もちろんテキストは「hoge」であるとは限りません。 何かよい解決方法はないでしょうか? ご教示頂けましたら幸いです。

    • ベストアンサー
    • PHP
  • CGIのtextareaへのタグの表示

    CGI(Perl)でWebのメモ帳のようなプログラムを作っています。 何種類かのHTMLタグの使用もできるようにしてあり、更に タグ説明のために &lt; &gt; などを記入することもあります。 初回の記入をそのまま表示させる場合は問題ありませんが、一度記入した内容を 編集のためにブラウザに再表示させ、更にそれを更新すると タグの <> と &lt; &gt;が どちらも <>に変換されてしまい、説明中の HTMLタグ文字列がタグになってしまいます。 例えば A: 最初の記入時「&lt; a href・・・ &gt; はリンクタグ」などと記入してアップロード B: サーバーログには「&lt; a href・・・ &gt; はリンクタグ」のまま記録される C: 編集のためにその記事を再表示させるとブラウザが「<a href・・・ >はリンクタグ」 と表示する D: 別の部分を編集後再アップロードするとログには <a href・・・ > がタグとして記録される E: 以降の表示では <a href・・・ > の部分がリンクタグとして扱われ「はリンクタグ」にリンクがかかる というような問題に悩んでいます。 textarea 内では <code>タグも使えなさそうで・・・ 思案の末、 textarea への送信時だけ 「 &lt; 」を 「<<」などとして送信し、CGIが「<<」を受け取ったら &lt; に変換してログ記録する などのローカルな方法を考えましたが、あまりスマートではないかと。 定石のような方法はないのでしょうか?

    • ベストアンサー
    • CGI
  • タグの不等号処理

    ただいまperlにて掲示板を製作中です。PC上でApacheを使いチェック中なのですが、タグなどで仕様する不等号を変換することが出来ません。下記のように処理しているのですが、なぜか変換されません。 foreach (@data){ s/&/&amp;/g; s/>/&gt;/g; s/</&lt;/g; s/"/&quot;/g; s/\r\n/\<br\>/g; s/\n/\<br\>/g; } ちなみにs/&/&amp;/g;の[&amp;]の部分を[AA]等に変更すると 問題なく[&]は[AA]に変更されます。 なぜなのでしょうか?表示時にタグとして認識されてしまい困っております。どうかご教授下さい。

    • ベストアンサー
    • CGI
  • ホームページ作成-Strict準拠をさせるには-

    現在HTML4.01StrictでHTML文書を記述しています。 しかし、CGI(掲示板)を読み込むページは、iframe要素を使っているため、Framesetで文書宣言をしています。だけど当方のゆくゆくの希望は、XHTML1.1に書き換えたいため、iframeを使っていることに抵抗感があります。 そこで次のような代替案を試してみましたが、CGI出力は表示されませんでした(Dreamweaverでのブラウザ出力・IE6)。下記の方法は無理があるのでしょうか? &lt;object data="….cgi" type="text/html"&gt; &lt;/object&gt; もしほかに方法があればご教示いただけないでしょうか。よろしくお願いします。 また上記方法で可能な場合、NN対策として、embedのsrc属性に、CGIを指定してもきちんと出力されるでしょうか? 併せてお願いいたします。 P.S. 『コンピュータ[家庭向け]』でも同じ質問をしましたが、削除を済ませた上でこちらに来ました。

    • ベストアンサー
    • HTML
  • フォームの太字を置き換える

    更新記録CGIみたいなものを改造しようとしています。 文章の一部に太字を入れたいと思っています。 入力・修正画面ではフォーム内で<B></B>と出れば良いですが、表示部分でそのまま出ると駄目ですよね。 そこで置き換えようと思ったのですが、うまく出来ません。 $com1 = ~ s/&lt;B&gt;/<B>/g; $com1 = ~ s/&lt;/B&gt;/</B>/g; とすると、$com1の内容が表示されなくなります。(他の部分は正常に表示している) 両方をコメントアウトすると、「&lt;B&gt;」と表示されます。 こういう場合、どのようにしたら良いのでしょうか?

    • ベストアンサー
    • Perl
  • HTMLタグのエスケープ文字をタグに戻す方法

    JavaのBufferedReaderクラスを使用して HTMLファイルを1行ずつ読み込んでまた、別のファイルに出力したところ HTMLファイル内では <br /> と表示されているところが出力ファイルでは &lt;br /&gt; というようにエスケープ文字で出力されてしまいました。 タグをそのまま出力したいのですがエスケープ文字で出力されないようにするためには どのようにすればよろしいでしょうか。

    • ベストアンサー
    • Java
  • ある書籍で、見つけました、perlのソースについて

    ある書籍で、見つけました、perlのソースについて 疑問がありまして、お尋ねします。 ※下記は、perl/cgiソースの一部です。 ある書籍で見つけたものです。 >require 'cgi-lib.pl'; >&ReadParse(¥%test); 私は、(%test)だと思っているのですが。 ()の中の、先頭に「¥」を付けることに、どのような意味 があるのでしょうか >$test = $test{'test'}; 仮に、$testの値が「"<&>"」だったとしまして、以下 をごらん頂きたいのですが、 >open(ファイルハンドル,$fname) >while(<ファイルハンドル>){ >$test =~ s/¥"/¥&quot¥;/g; 私の認識では、「s/"/&quot;/g;」ではと思うのですが、 「¥」はどのような意味なのでしょうか 以下、3行も同じ疑問です。 >$test =~ s/&/\&testmp\;/g; >$test =~ s/¥</¥&lt¥;/g; >$test =~ s/¥>/¥&gt¥;/g; >print $_; >} 書籍で上記のソースを見たのですが、 HTMLのフォームのテキストボックスに、「"<&>"」と入力し submitボタンで、上記コードを含む、cgiを開きます。 そして、「"<&>"」を受取っても正しく、置換し、 cgiから、HTML($fname)を開くプログラムです。 置換後のHTMLファイルには、「"<&>"」と表示されます。 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 回答投稿時に余計な半角スペースが挿入されてしまう

    HTMLタグを入力する際に気が付いたのですが、次のような変換が行われています。 ** 再現する環境 ** IE7, Firefox3.0.1.1 ** 現象 ** HTMLタグを入力すると、次のような変換が行われる。 <a href="http://okwave.jp/">OKWave</a>  ↓ &lt;a href=&quot;&#x200b;<a href="http://okwave.jp/" target="_blank">http://www.yahoo.co.jp/&quot;</a>&#x200b;&gt;OKWave&lt;/a&gt; ** 不具合 ** 1. クリップボードへコピーすると、&#x200b; が半角スペースとして処理されてしまう。 上の事例なら、「<a href=" http://okwave.jp/" >OKWave</a>」がコピーされる。 そのため、せっかく貼り付けたHTMLがコピーできず質問者さんの誤解を招くことに。(経験談) 2. シングルコーテーション、ダブルコーテーションも含めてリンクされてしまう HTMLタグでは正常にリンクが行えない。 # 想像ですが、HTMLへの変換の順番に問題がある気がしています。 # 「クオートのエスケープ後→リンク化」という処理順だと、2. は再現できそうです。 # 1. はどういった経緯で生まれたのか想像も付きませんが…。 これは私の環境だけの問題なのでしょうか? (以前はこんな事はなかった気がするのですが)