2010-08-10 5 views
0

J'ai cette fonction qui prend un certain code HTML soumis par les utilisateurs de la base de données:Mise en forme du code HTML à émettre en clair, avec PHP

function Code($code) 
{ 
    return "<pre><code>".nl2br(htmlspecialchars($code))."</code></pre>"; 
} 

Je vais être l'appeler comme echo code($query->row('html'));. Je sais que ma question manque de profondeur, mais est-ce la meilleure façon de le faire? Ou la mise en forme sortie peut-elle être analysée (par exemple injections Javascript), ou ne pas être sortie correctement sur certaines machines, etc.?

Merci!

Jack

EDIT: J'ai une nouvelle (liée) question: Je voudrais souligner la chaîne en utilisant highlight_string(). Cependant, je ne peux pas le faire fonctionner correctement. I pense Je comprends pourquoi mais je ne sais pas trop comment je peux remédier à cela.

function Code($code) 
{ 
    return "<pre><code>".highlight_string(nl2br(htmlspecialchars($code)))."</code></pre>"; 
} 

Comme vous pouvez le voir que j'utilise highlight_string() sur tout. Toutefois, la sortie n'est pas mise en surbrillance, mais elle est sortie en tant qu'entité de caractères (&lt;, '>', etc.). Si je rebattre les commandes de fonction à quelque chose comme:

return "<pre><code>".nl2br(htmlspecialchars(highlight_string($code)))."</code></pre>";

Je trouve que les entités de caractère ne sont pas sortie, mais la chaîne est toujours pas mis en évidence. Pour clarifier, je n'ai pas de formatage CSS qui affecterait la couleur du texte appliquée. En outre, j'ai vérifié mes paramètres PHP et il y a définitivement des couleurs en surbrillance spécifiées ici.

Répondre

3

Non, c'est bien. htmlspecialchars() va transformer n'importe quel caractère de contrôle HTML en son équivalent entité (< =>&lt; etc.), il n'y a aucun moyen d'y injecter quelque chose.

+0

Excellent, merci! J'ai aussi ajouté un peu plus à la question ... :) – Jack

+0

@Jack 'highlight_string()' ne fonctionnera pas parce que vous êtes dans les blocs 'pre' et' code'. Ils ne prennent pas en charge le formatage HTML. –

+0

J'ai changé la fonction Code() pour lire ceci: 'return" ".nl2br (htmlspecialchars (highlight_string ($ code)))." ";' - Malheureusement, cela ne fonctionne toujours pas. J'ai aussi essayé de "mélanger" la profondeur de la fonction 'highlight_string()' (par exemple, la mettre à l'avant), mais pas de chance. Il y a aussi des '1' inhabituels en sortie, voir capture d'écran: http://cl.ly/603f491d7402e06125be - ils ne sont définitivement pas dans les données de la base de données. – Jack