各<
を<
および>
を>
に置き換える必要なしに、WebページにHTMLコードスニペットを表示する方法はありますか?
言い換えれば、というタグは終了タグを押すまでHTMLをレンダリングしないのですか?
いいえ、ありません。適切なHTMLでは、一部の文字をエスケープする以外に方法はありません。
&
を&
として<
を<
として(ちなみに、>
をエスケープする必要はありませんが、対称性のためによく使われます。)
そしてもちろん、(a)空白と改行を保存し、(b)コード要素としてマークアップするために、結果のエスケープされたHTMLコードを<pre><code>…</code></pre>
で囲む必要があります。
コードを<textarea>
または(廃止予定の)<xmp>
要素にラップするなど、他のすべての解決策は失敗します。1
ブラウザにXMLとして宣言されているXHTML(HTTP Content-Type
ヘッダを介して! - 単にDOCTYPE
を設定するだけでは不十分)には、代わりにCDATAセクションを使用できます。
<![CDATA[Your <code> here]]>
しかし、これはXMLでは機能し、HTMLでは機能しません。コードには終了区切り文字の]]>
を含める必要がないため、これでも完全な解決策とは言えません。そのため、XMLでも最も単純で最も堅牢な解決策はエスケープです。
1 適例:
textarea {border: none; width: 100%;}
<textarea readonly="readonly">
<p>Computer <textarea>says</textarea> <span>no.</span>
</textarea>
<xmp>
Computer <xmp>says</xmp> <span>no.</span>
</xmp>
最善の方法:
<xmp>
// your codes ..
</xmp>
古いサンプル:
サンプル1:
<pre>
This text has
been formatted using
the HTML pre tag. The brower should
display all white space
as it was entered.
</pre>
サンプル2:
<pre>
<code>
My pre-formatted code
here.
</code>
</pre>
サンプル3:(実際にコードブロックを "引用"している場合、マークアップは以下のようになります)
<blockquote>
<pre>
<code>
My pre-formatted "quoted" code here.
</code>
</pre>
</blockquote>
素敵なCSSのサンプル:
pre{
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
margin-bottom: 10px;
overflow: auto;
width: auto;
padding: 5px;
background-color: #eee;
width: 650px!ie7;
padding-bottom: 20px!ie7;
max-height: 600px;
}
構文強調表示コード(プロ用):
虹(とてもパーフェクト)
あなたへの最高のリンク:
https://github.com/balupton/jquery-syntaxhighlighter
http://bavotasan.com/2009/how-to-wrap-text-within-the-pre-tag-using-css/
http://alexgorbatchev.com/SyntaxHighlighter/
コードを表示する単純な方法としては、textareaにそれを含め、disabled属性を追加して編集できないようにすることが考えられます。
<textarea disabled> code </textarea>
誰かが物事を成し遂げるための簡単な方法を探しているのを助けることを願っています..
非推奨 、FF3とIE8で動作します。
<xmp>
<b>bold</b><ul><li>list item</li></ul>
</xmp>
おすすめ:
<pre><code>
code here, escape it yourself.
</code></pre>
私はこのように<xmp>
を使いました: http://jsfiddle.net/barnameha/hF985/1/
それは非常に簡単です....このxmpコードを使用してください
<xmp id="container">
<xmp >
<p>a paragraph</p>
</xmp >
</xmp>
HTMLでは?いいえ.
XML/XHTMLでは? CDATA
ブロックを使うことができます。
私が想定し:
<
はエスケープする必要はありませんあなたのすべてのオプションはこの木にあります:
<p>
のように)<
を持つことはできません"
と&thing;
はエスケープする必要があります。それぞれ"
と&thing;
<script>
および<style>
のみ</script
のどこにもリテラル<script>
は使用できません<textarea>
および<title>
のみ<textarea>
は、コードをラップするのに適した候補です。</html>
を書くことは全く合法です</textarea
は合法ではありません</textarea
などでエスケープする&thing;
はエスケープする必要があります:&thing;
注:>
はエスケープする必要がありません。通常の要素でもそうではありません。
非推奨の<xmp>
タグは本質的にそれを行いますが、もはやXHTML仕様の一部ではありません。それは現在のすべてのブラウザではまだ動作するはずです。
これは別のアイデア、ハック/パーラーのトリックです。あなたはそのようにテキストエリアにコードを入れることができます:
<textarea disabled="true" style="border: none;background-color:white;">
<p>test</p>
</textarea>
このような山括弧とコードをテキスト領域内に置くことは無効なHTMLであり、異なるブラウザでは未定義の動作を引き起こします。 Internet ExplorerではHTMLが解釈されますが、Mozilla、Chrome、およびSafariでは解釈されません。
編集不可能で外観を変えたい場合は、CSSを使用して簡単にスタイルを設定できます。唯一の問題は、ブラウザがボックスのサイズを変更するために右下隅にその小さなドラッグハンドルを追加することです。あるいは、代わりに入力タグを使用してみてください。
テキストエリアにコードを挿入する正しい方法は、次のようなサーバーサイドの言語を使用することですPHP。
<textarea disabled="true" style="border: none;background-color:white;">
<?php echo '<p>test</p>'; ?>
</textarea>
それからhtmlインタプリタを迂回し、未解釈のテキストをすべてのブラウザで一貫してtextareaに入れます。
それ以外の唯一の方法は、静的HTMLの場合はコードを自分自身でエスケープするか、そのようなテクノロジを使用する場合は.NETのHtmlEncode()などのサーバーサイドメソッドを使用することです。
究極的には(最も厄介ではあるが)最も良い答えは「テキストからの脱出」です。
しかしながら、これを自動的に行うことができる多くのテキストエディタ、あるいはスタンドアロンのミニユーティリティさえあります。そうしたくないのであれば、手動でエスケープする必要はありません(エスケープされたコードとエスケープされていないコードが混在していない限り...)
たとえば、クイックGoogle検索でこれが表示されます。 http://malektips.com/zzee-text-utility-html-escape-regular-expression.html
同じページの別の場所で実行しているコードの集まりを表示することを目的としている場合は、textContentを使用できます(純粋なjsで、よくサポートされています: http://caniuse.com /#feat = textcontent )
<div id="myCode">
<p>
hello world
</p>
</div>
<div id="loadHere"></div>
document.getElementById("myCode").textContent = document.getElementById("loadHere").innerHTML;
結果を複数行にフォーマットするには、CSSスタイルを "white-space:pre;"に設定する必要があります。ターゲットdivで、それぞれの最後に "\ r\n"を使用して行を個別に書き込みます。
これがデモです。 https://jsfiddle.net/wphps3od/
この方法は、テキストエリアを使用するよりも利点があります。コードは、テキストエリアと同じように再フォーマットされません。 (
のようなものはテキストエリアで完全に削除されます)
生のテキストを挿入するためにPHPのようなサーバーサイドの言語を使うことができます:
<?php
$str = <<<EOD
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="description" content="Minimal HTML5">
<meta name="keywords" content="HTML5,Minimal">
<title>This is the title</title>
<link rel='stylesheet.css' href='style.css'>
</head>
<body>
</body>
</html>
EOD;
?>
それから$str
htmlencodedの値をダンプします。
<div style="white-space: pre">
<?php echo htmlentities($str); ?>
</div>
これはほとんどの状況ではるかに最良の方法です。
<pre><code>
code here, escape it yourself.
</code></pre>
私はそれを提案した最初の人に投票したでしょうが、私は評判がありません。私は人々がインターネット上で答えを見つけようとしているために何かを言うことを強いられたと感じました。
function escapeHTML(string)
{
var pre = document.createElement('pre');
var text = document.createTextNode(string);
pre.appendChild(text);
return pre.innerHTML;
}//end escapeHTML
エスケープされたHTMLを返します
HTMLで すべてをエスケープする する方法はいくつかありますが、どれもいい方法ではありません。
あるいは、プレーンテキストファイルをロードするiframe
を入れることもできます。
これは簡単なトリックです、そして私はSafariとFirefoxでそれを試しました
<code>
<span><</span>meta property="og:title" content="A very fine cuisine" /><br>
<span><</span>meta property="og:image" content="http://www.example.com/image.png" />
</code>
これは次のように表示されます。
ライブで見ることができます ここ
これが私のやり方です。
$str = file_get_contents("my-code-file.php");
echo "<textarea disabled='true' style='border: none;background-color:white;'>";
echo $str;
echo "</textarea>";
<textarea ><?php echo htmlentities($page_html); ?></textarea>
私のためにうまくいきます。
「Alexander's
提案を覚えておいて、これが私がこれが良いアプローチだと思う理由です」
普通の<textarea>
を試しただけではうまくいかないかもしれません。なぜなら、親タグを誤って閉じて、親文書上の残りのHTMLソースを表示してしまう可能性がある閉じtextarea
タグがあるからです。
htmlentities
を使用すると、< >
などの該当するすべての文字がHTMLエンティティに変換され、リークの可能性がなくなります。
この方法には利点や欠点、あるいは同じ結果を得るためのより良い方法があるかもしれません。
<textarea readonly> code </textarea>
OR
<textarea disabled> code </textarea>
テキスト領域内の文字列を選択してコピーすることに興味がある場合は、 'readonly'属性を持つ1番目の属性を使用してください。
データの選択やコピーに興味がない場合は、2番目のものを使用してください。つまり、情報を表示するだけの場合は。
あなたが試すことができます:
Hello! Here is some code:
<xmp>
<div id="hello">
</div>
</xmp>
すべての状況で機能するわけではありませんが、コードスニペットをtextarea
内に配置すると、コードとして表示されます。
実際のテキストエリアのように見たくない場合は、CSSでテキストエリアをスタイルすることができます。