Jawaban:
Tidak , tidak ada. Dalam HTML yang tepat, tidak ada jalan keluar dari beberapa karakter:
&
sebagai &
<
sebagai <
(Kebetulan, tidak perlu melarikan diri >
tetapi orang sering melakukannya karena alasan simetri.)
Dan tentu saja Anda harus mengelilingi kode HTML yang dihasilkan, lolos <pre><code>…</code></pre>
ke dalam (a) melestarikan spasi putih dan jeda baris, dan (b) menandainya sebagai elemen kode.
Semua solusi lain, seperti membungkus kode Anda ke <textarea>
dalam <xmp>
elemen (atau usang) , akan rusak . 1
XHTML yang dinyatakan browser sebagai XML (melalui HTTP Content-Type
header - hanya menetapkan! DOCTYPE
Adalah tidak cukup ) alternatif bisa menggunakan bagian CDATA:
<![CDATA[Your <code> here]]>
Tetapi ini hanya berfungsi dalam XML, bukan dalam HTML, dan bahkan ini bukan solusi yang mudah, karena kode tidak boleh mengandung pembatas penutup ]]>
. Jadi, bahkan dalam XML, solusi paling sederhana dan paling kuat adalah melalui pelolosan.
1 Contoh kasus:
>
dengan >
<
dan &
perlu diganti, unescaped >
valid di dalam HTML.
Metode yang dicoba dan benar untuk HTML:
&
pertama dan <
sesudahnya.
Cara terbaik:
<xmp>
// your codes ..
</xmp>
sampel lama:
sampel 1 :
<pre>
This text has
been formatted using
the HTML pre tag. The brower should
display all white space
as it was entered.
</pre>
sampel 2 :
<pre>
<code>
My pre-formatted code
here.
</code>
</pre>
contoh 3 : (Jika Anda benar-benar "mengutip" satu blok kode, maka markupnya adalah
<blockquote>
<pre>
<code>
My pre-formatted "quoted" code here.
</code>
</pre>
</blockquote>
contoh CSS yang bagus:
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;
}
Kode penyorot sintaks (Untuk pekerjaan profesional):
pelangi (sangat sempurna)
tautan terbaik untuk Anda:
https://github.com/balupton/jquery-syntaxhighlighter
http://bavotasan.com/2009/how-to-wrap-text-within-the-pre-tag-using-css/
http://alexgorbatchev.com/SyntaxHighlighter/
Jenis metode naif untuk menampilkan kode akan memasukkannya ke dalam textarea dan menambahkan atribut yang dinonaktifkan sehingga tidak dapat diedit.
<textarea disabled> code </textarea>
Semoga itu membantu seseorang mencari cara mudah untuk menyelesaikan sesuatu ..
Sudah usang , tetapi bekerja di FF3 dan IE8.
<xmp>
<b>bold</b><ul><li>list item</li></ul>
</xmp>
Direkomendasikan:
<pre><code>
code here, escape it yourself.
</code></pre>
saya menggunakan <xmp>
seperti ini:
http://jsfiddle.net/barnameha/hF985/1/
<xmp>
Tag yang sudah usang pada dasarnya melakukan itu tetapi tidak lagi menjadi bagian dari spesifikasi XHTML. Itu masih harus bekerja meskipun di semua browser saat ini.
Ini ide lain, trik hack / salon, Anda bisa memasukkan kode ke dalam teks seperti:
<textarea disabled="true" style="border: none;background-color:white;">
<p>test</p>
</textarea>
Menempatkan tanda kurung sudut dan kode seperti ini di dalam area teks adalah HTML yang tidak valid dan akan menyebabkan perilaku yang tidak terdefinisi di browser yang berbeda. Di Internet Explorer HTML diartikan, sedangkan Mozilla, Chrome dan Safari membiarkannya tidak diinterpretasikan.
Jika Anda ingin itu tidak dapat diedit dan terlihat berbeda maka Anda dapat dengan mudah gaya menggunakan CSS. Satu-satunya masalah adalah bahwa browser akan menambahkan pegangan seret kecil di sudut kanan bawah untuk mengubah ukuran kotak. Atau sebagai alternatif, coba gunakan tag input saja.
Cara yang tepat untuk menyuntikkan kode ke dalam textarea Anda adalah dengan menggunakan bahasa sisi server seperti PHP ini misalnya:
<textarea disabled="true" style="border: none;background-color:white;">
<?php echo '<p>test</p>'; ?>
</textarea>
Kemudian ia memotong penerjemah html dan menempatkan teks yang tidak diinterpretasikan ke dalam textarea secara konsisten di semua browser.
Selain itu, satu-satunya cara adalah keluar dari kode sendiri jika HTML statis atau menggunakan metode sisi server seperti .NET's HtmlEncode () jika menggunakan teknologi tersebut.
<textarea disabled="true" style="border: none;background-color:white; width:100%">
Saya berasumsi:
<
tidak perlu melarikan diriSemua opsi Anda ada di pohon ini:
<p>
)
<
"
dan &thing;
perlu melarikan diri: "
dan &thing;
masing - masing<script>
dan <style>
hanya</script
tidak diizinkan di mana pun di Indonesia<script>
<textarea>
dan <title>
hanya<textarea>
adalah kandidat yang baik untuk membungkus kode</html>
di sana</textarea
karena alasan yang jelas
</textarea
atau serupa&thing;
kebutuhan untuk melarikan diri: &thing;
Catatan: >
tidak perlu melarikan diri. Bahkan dalam elemen normal sekalipun.
<script>
dan <style>
dapat ditampilkan, cukup letakkan di dalam <body>
with style="display: block; white-space: pre;"
dan type="text/html"
atau sesuatu jika Anda tidak ingin dieksekusi sebagai JavaScript. Trik yang cukup bagus menurut saya, bagus untuk pemrograman dan pengajaran yang melek. Juga <xmp>
masih diterapkan di browser utama, meskipun sudah usang.
<xmp>
bukan HTML5 yang valid, tetapi trik Anda yang lain terlihat tepat!
Jika tujuan Anda adalah untuk menunjukkan sepotong kode yang Anda jalankan di tempat lain pada halaman yang sama, Anda dapat menggunakan textContent (ini murni-js dan didukung dengan baik: 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;
Untuk mendapatkan pemformatan multi-garis di hasilnya, Anda perlu mengatur gaya css "white-space: pre;" pada target div, dan tulis baris secara individual menggunakan "\ r \ n" di akhir masing-masing.
Berikut ini demo: https://jsfiddle.net/wphps3od/
Metode ini memiliki keunggulan dibandingkan menggunakan textarea: Kode tidak akan diformat ulang seperti dalam textarea. (Hal-hal seperti
dihapus seluruhnya dalam textarea)
<template>
atau sesuatu yang biasanya tidak diberikan.
Pada akhirnya jawaban terbaik (meskipun menjengkelkan) adalah "lepas teks".
Namun ada banyak editor teks - atau bahkan utilitas mini yang berdiri sendiri - yang dapat melakukan ini secara otomatis. Jadi Anda tidak perlu melarikan diri secara manual jika Anda tidak mau (Kecuali jika itu adalah kombinasi kode yang lolos dan yang tidak diloloskan ...)
Pencarian Google cepat menunjukkan kepada saya yang ini, misalnya: http://malektips.com/zzee-text-utility-html-escape-regular-expression.html
<textarea ><?php echo htmlentities($page_html); ?></textarea>
berfungsi dengan baik untuk saya ..
"Mengingat Alexander's
saran, inilah mengapa saya pikir ini adalah pendekatan yang baik"
jika kita coba polos, <textarea>
itu mungkin tidak selalu berhasil karena mungkin ada textarea
tag penutup yang salah menutup tag induk dan menampilkan sisa sumber HTML pada dokumen induk, yang akan terlihat canggung.
menggunakan htmlentities
konversi semua karakter yang berlaku seperti < >
ke entitas HTML yang menghilangkan kemungkinan kebocoran.
Mungkin ada manfaat atau kekurangan untuk pendekatan ini atau cara yang lebih baik untuk mencapai hasil yang sama, jika demikian silakan berkomentar karena saya ingin belajar dari mereka :)
Anda bisa menggunakan bahasa sisi server seperti PHP untuk memasukkan teks mentah:
<?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;
?>
lalu buang nilai $str
htmlencoded:
<div style="white-space: pre">
<?php echo htmlentities($str); ?>
</div>
Ini adalah trik sederhana dan saya sudah mencobanya di Safari dan 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>
Ini akan ditampilkan seperti ini:
Anda bisa melihatnya langsung di sini
Sebenarnya ada adalah cara untuk melakukan hal ini. Ini memiliki batasan (satu), tetapi standar 100%, tidak usang (seperti xmp), dan berfungsi.
Dan itu sepele. Ini dia:
<div id="mydoc-src" style="display: none;">
LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
<!--
YOUR CODE HERE.
<script src="WidgetsLib/all.js"></script>
^^ This is a text, no side effects trying to load it.
-->
LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
</div>
Tolong izinkan saya menjelaskan. Pertama-tama, komentar HTML biasa berfungsi, untuk mencegah seluruh blok ditafsirkan. Anda dapat dengan mudah menambahkan tag apa pun di dalamnya, semuanya akan diabaikan. Diabaikan dari interpretasi, tetapi masih tersedia via innerHTML
! Jadi yang tersisa, adalah untuk mendapatkan konten, dan memfilter token komentar sebelumnya dan tertinggal.
Kecuali (ingat - batasannya) Anda tidak dapat memasukkan komentar HTML di dalamnya, karena (setidaknya di Chrome saya) tidak ada yang mendukung, dan '->' pertama akan mengakhiri pertunjukan.
Yah, itu adalah batasan kecil yang tidak menyenangkan, tetapi dalam kasus-kasus tertentu itu tidak masalah sama sekali, jika teks Anda bebas dari komentar HTML. Dan, lebih mudah untuk lolos dari satu konstruksi, lalu sejumlah besar dari mereka.
Sekarang, apa LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo
string aneh itu ? Ini string acak, seperti hash, tidak mungkin digunakan di blok, dan digunakan untuk? Inilah konteksnya, mengapa saya menggunakannya. Dalam kasus saya, saya mengambil konten dari satu DIV, lalu memprosesnya dengan penurunan harga Showdown, dan kemudian output ditugaskan ke div lain. Idenya adalah, untuk menulis penurunan harga inline dalam file HTML, dan cukup buka di browser dan itu akan berubah pada beban on-the-fly. Jadi, dalam kasus saya, <!--
diubah menjadi <p><!--</p>
, komentar dengan benar lolos. Itu berhasil, tetapi mencemari layar. Jadi, untuk menghapusnya dengan regex, string acak digunakan. Berikut kodenya:
var converter = new showdown.Converter();
converter.setOption('simplifiedAutoLink', true);
converter.setOption('tables', true);
converter.setOption('tasklists', true);
var src = document.getElementById("mydoc-src");
var res = document.getElementById("mydoc-res");
res.innerHTML = converter.makeHtml(src.innerHTML)
.replace(/<p>.{0,10}LlNnlljn77fggggkk77csJJK8bbJBKJBkjjjjbbbJJLJLLJo.{0,10}<\/p>/g, "");
src.innerHTML = '';
Dan itu berhasil.
Jika seseorang tertarik, artikel ini ditulis menggunakan teknik ini. Jangan ragu untuk mengunduh, dan lihat ke dalam file HTML.
Tergantung untuk apa Anda menggunakannya. Apakah itu input pengguna? Kemudian gunakan <textarea>
, dan lepaskan semuanya. Dalam kasus saya, dan mungkin Anda juga, saya hanya menggunakan komentar, dan itu berhasil.
Jika Anda tidak menggunakan markdown, dan hanya ingin mendapatkannya dari tag, maka itu lebih sederhana:
<div id="mydoc-src" style="display: none;">
<!--
YOUR CODE HERE.
<script src="WidgetsLib/all.js"></script>
^^ This is a text, no side effects trying to load it.
-->
</div>
dan kode JavaScript untuk mendapatkannya:
var src = document.getElementById("mydoc-src");
var YOUR_CODE = src.innerHTML.replace(/(<!--|-->)/g, "");
Ada beberapa cara untuk menghindari semuanya dalam HTML, tidak ada yang bagus.
Atau Anda bisa memasukkan iframe
yang memuat file teks biasa.
Sejauh ini, ini adalah metode terbaik untuk sebagian besar situasi:
<pre><code>
code here, escape it yourself.
</code></pre>
Saya akan memilih orang pertama yang menyarankannya tetapi saya tidak memiliki reputasi. Saya merasa terdorong untuk mengatakan sesuatu demi orang-orang yang mencoba menemukan jawaban di Internet.
Beginilah cara saya melakukannya:
$str = file_get_contents("my-code-file.php");
echo "<textarea disabled='true' style='border: none;background-color:white;'>";
echo $str;
echo "</textarea>";
function escapeHTML(string)
{
var pre = document.createElement('pre');
var text = document.createTextNode(string);
pre.appendChild(text);
return pre.innerHTML;
}//end escapeHTML
itu akan mengembalikan Html yang lolos
Kamu bisa mencoba:
Hello! Here is some code:
<xmp>
<div id="hello">
</div>
</xmp>
Ini mungkin tidak berfungsi di setiap situasi, tetapi menempatkan potongan kode di dalam textarea
akan menampilkannya sebagai kode.
Anda bisa menata textarea dengan CSS jika Anda tidak ingin itu terlihat seperti textarea yang sebenarnya.
Ini sedikit meretas, tetapi kita bisa menggunakan sesuatu seperti:
body script {
display: block;
font-family: monospace;
white-space: pre;
}
<script type="text/html">
<h1>Hello World</h1>
<ul>
<li>Enjoy this dodgy hack,
<li>or don't!
</ul>
</script>
Dengan CSS itu, browser akan menampilkan skrip di dalam tubuh. Itu tidak akan mencoba untuk mengeksekusi skrip ini, karena memiliki jenis yang tidak dikenal text/html
. Tidak perlu keluar dari karakter khusus di dalam <script>
, kecuali jika Anda ingin menyertakan </script>
tag penutup .
Saya menggunakan sesuatu seperti ini untuk menampilkan JavaScript yang dapat dieksekusi di badan halaman, untuk semacam "melek huruf progamming".
Ada beberapa info lagi dalam pertanyaan ini Kapan seharusnya tag terlihat dan mengapa bisa? .
//To show xml tags in table columns you will have to encode the tags first
function htmlEncode(value) {
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html();
}
html = htmlEncode(html)
Kombinasi jawaban pasangan yang bekerja bersama di sini:
function c(s) {
return s.split("<").join("<").split(">").join(">").split("&").join("&")
}
displayMe.innerHTML = ok.innerHTML;
console.log(
c(ok.innerHTML)
)
<textarea style="display:none" id="ok">
<script>
console.log("hello", 5&9);
</script>
</textarea>
<div id="displayMe">
</div>