Est-il possible d'afficher des extraits de code HTML sur une page Web sans avoir à remplacer chaque <
par <
et >
par >
?
En d'autres termes, existe-t-il une balise pour ne rend pas le code HTML tant que vous n'avez pas appuyé sur la balise de fermeture ?
Non, il n'y en a pas. En HTML proprement dit, il n’ya aucun moyen d’échapper à certains caractères:
&
comme &
<
comme <
(Incidemment, il n'est pas nécessaire d'échapper à >
mais les gens le font souvent pour des raisons de symétrie.)
Et bien sûr, vous devriez entourer le code HTML échappé résultant dans <pre><code>…</code></pre>
pour (a) préserver les espaces et les sauts de ligne, et (b) le marquer comme un élément de code.
Toutes les autres solutions, telles que l'intégration de votre code dans un <textarea>
ou l'élément (obsolète) <xmp>
, rompront.1
XHTML déclaré au navigateur en tant que XML (via l'en-tête HTTP Content-Type
! - le simple fait de définir une variable DOCTYPE
est pas assez] peut également utiliser une section CDATA:
<![CDATA[Your <code> here]]>
Mais cela ne fonctionne qu’en XML, pas en HTML, et même cette solution n’est pas infaillible, car le code ne doit pas contenir le délimiteur de fermeture ]]>
. Ainsi, même en XML, la solution la plus simple et la plus robuste consiste à s’échapper.
1 Exemple:
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>
meilleur moyen:
<xmp>
// your codes ..
</xmp>
anciens échantillons:
échantillon 1:
<pre>
This text has
been formatted using
the HTML pre tag. The brower should
display all white space
as it was entered.
</pre>
échantillon 2:
<pre>
<code>
My pre-formatted code
here.
</code>
</pre>
échantillon 3: (Si vous "citez" un bloc de code, le balisage serait alors)
<blockquote>
<pre>
<code>
My pre-formatted "quoted" code here.
</code>
</pre>
</blockquote>
Nice échantillon 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;
}
Code de mise en évidence de la syntaxe (pour les professionnels):
rainbows(très parfait)
meilleurs liens pour vous:
https://github.com/balupton/jquery-syntaxhighlighter
http://bavotasan.com/2009/how-to-wrap-text-within-the-pre-tag-using-css/
http://alexgorbatchev.com/SyntaxHighlighter/
Une méthode naïve d’affichage du code consiste à l’inclure dans une zone de texte et à ajouter un attribut désactivé afin qu’elle ne soit pas modifiable.
<textarea disabled> code </textarea>
J'espère que cela aidera quelqu'un à la recherche d'un moyen simple d'obtenir des résultats.
Déconseillé , mais fonctionne en FF3 et IE8.
<xmp>
<b>bold</b><ul><li>list item</li></ul>
</xmp>
Conseillé:
<pre><code>
code here, escape it yourself.
</code></pre>
j'ai utilisé <xmp>
juste comme ceci: http://jsfiddle.net/barnameha/hF985/1/
En HTML? Non.
En XML/XHTML? Vous pouvez utiliser un bloc CDATA
.
C'est très simple .... Utilisez ce code xmp
<xmp id="container">
<xmp >
<p>a paragraph</p>
</xmp >
</xmp>
Je suppose:
<
ne devrait pas avoir besoin de s'échapperToutes vos options sont dans cet arbre:
<p>
) <
littéral"
et &thing;
doivent être échappés: "
et &thing;
respectivement<script>
et <style>
seulement</script
littéral n'est autorisé dans aucun endroit dans <script>
<textarea>
et <title>
seulement<textarea>
est un bon candidat pour insérer du code dans</html>
dedans</textarea
pour des raisons évidentes </textarea
ou similaire&thing;
doit être échappé: &thing;
Remarque: >
n'a jamais besoin d'être échappé. Pas même dans les éléments normaux.
La balise obsolète <xmp>
le fait essentiellement, mais ne fait plus partie de la spécification XHTML. Cela devrait quand même fonctionner dans tous les navigateurs actuels.
Voici une autre idée, une astuce de hack/parlor, vous pouvez mettre le code dans une zone de texte comme ceci:
<textarea disabled="true" style="border: none;background-color:white;">
<p>test</p>
</textarea>
Mettre des crochets et un code comme celui-ci dans une zone de texte est un code HTML invalide et entraînera un comportement indéfini dans différents navigateurs. Dans Internet Explorer, le code HTML est interprété, alors que Mozilla, Chrome et Safari le laissent non interprété.
Si vous voulez qu'il soit non éditable et différent, vous pouvez facilement le styler à l'aide de CSS. Le seul problème serait que les navigateurs ajouteront cette petite poignée de glisser dans le coin inférieur droit pour redimensionner la boîte. Ou bien, essayez plutôt d'utiliser une balise input.
La bonne façon d’injecter du code dans votre zone de texte consiste à utiliser un langage côté serveur tel que PHP par exemple:
<textarea disabled="true" style="border: none;background-color:white;">
<?php echo '<p>test</p>'; ?>
</textarea>
Ensuite, il contourne l’interpréteur html et place le texte non interprété dans la zone de texte de manière cohérente, quel que soit le navigateur.
En dehors de cela, le seul moyen consiste à échapper vous-même au code si vous utilisez du code HTML statique ou utilisez des méthodes côté serveur telles que HtmlEncode () de .NET si vous utilisez une telle technologie.
En fin de compte, la meilleure réponse (bien que gênante) est "échapper au texte".
Cependant, de nombreux éditeurs de texte, voire des mini-utilitaires autonomes, peuvent le faire automatiquement. Donc vous ne devriez jamais avoir à y échapper manuellement si vous ne voulez pas (sauf si c'est un mélange de code échappé et non échappé ...)
Une recherche rapide sur Google me montre celle-ci, par exemple: http://malektips.com/zzee-text-utility-html-escape-regular-expression.html
Ceci est une astuce simple et je l'ai essayé dans Safari et 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>
Il va montrer comme ça:
Vous pouvez le voir en direct Ici
<textarea ><?php echo htmlentities($page_html); ?></textarea>
fonctionne bien pour moi ..
"en gardant à l'esprit la suggestion Alexander's
, voici pourquoi je pense que c'est une bonne approche"
si nous essayons simplement de plier <textarea>
, cela risque de ne pas toujours fonctionner car il peut y avoir des balises textarea
fermantes qui risquent de fermer à tort la balise parent et d'afficher le reste de la source HTML sur le document parent, ce qui pourrait paraître gênant.
l'utilisation de htmlentities
convertit tous les caractères applicables, tels que < >
, en entités HTML, ce qui élimine toute possibilité de fuite.
Il peut y avoir des avantages ou des inconvénients à cette approche ou une meilleure façon d’obtenir les mêmes résultats. Si tel est le cas, veuillez commenter car j’aimerais apprendre d’eux :)
Si votre objectif est de montrer un morceau de code que vous exécutez ailleurs sur la même page, vous pouvez utiliser textContent (c'est pur-js et bien supporté: 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;
Pour obtenir une mise en forme multiligne dans le résultat, vous devez définir le style css "white-space: pre;" sur le div cible et écrivez les lignes individuellement en utilisant "\ r\n" à la fin de chacune.
Voici une démo: https://jsfiddle.net/wphps3od/
Cette méthode présente un avantage sur l'utilisation de textarea: le code ne sera pas reformaté comme dans une textarea. (Des choses comme
sont entièrement supprimées dans une zone de texte)
Vous pouvez utiliser un langage côté serveur tel que PHP pour insérer du texte brut:
<?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;
?>
puis extrayez la valeur de $str
htmlencoded:
<div style="white-space: pre">
<?php echo htmlentities($str); ?>
</div>
C'est de loin la meilleure méthode pour la plupart des situations:
<pre><code>
code here, escape it yourself.
</code></pre>
J'aurais voté la première personne qui l'a suggéré mais je n'ai pas de réputation. Je me suis senti obligé de dire quelque chose dans l'intérêt des gens qui essayaient de trouver des réponses sur Internet.
function escapeHTML(string)
{
var pre = document.createElement('pre');
var text = document.createTextNode(string);
pre.appendChild(text);
return pre.innerHTML;
}//end escapeHTML
il retournera le HTML échappé
Il existe quelques moyens pour échapper à tout en HTML, aucun d’entre eux n’est agréable.
Ou vous pouvez mettre une variable iframe
qui charge un ancien fichier texte brut.
Voici comment je l'ai fait:
$str = file_get_contents("my-code-file.php");
echo "<textarea disabled='true' style='border: none;background-color:white;'>";
echo $str;
echo "</textarea>";
<textarea readonly> code </textarea>
OR
<textarea disabled> code </textarea>
Utilisez le premier attribut 'readonly' si vous souhaitez sélectionner et copier la chaîne dans la zone de texte.
Utilisez le second si vous n'êtes pas intéressé par la sélection ou la copie des données. c'est-à-dire si vous vous souciez seulement d'afficher des informations.
Tu pourrais essayer:
Hello! Here is some code:
<xmp>
<div id="hello">
</div>
</xmp>
Cela peut ne pas fonctionner dans toutes les situations, mais le fait de placer des extraits de code dans une textarea
les affichera sous forme de code.
Vous pouvez styler la zone de texte avec CSS si vous ne voulez pas qu'elle ressemble à une zone de texte réelle.