2009-12-22 12 views
8

Ich habe eine Zeichenfolge, die wie dieseEncode HTML-Entitäten, aber HTML-Tags ignorieren - in PHP

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
htmlentities($str,ENT_COMPAT,'UTF-8',false); 

aussehen könnten Wie kann ich den Text in HTML-Entitäten zu konvertieren, ohne die HTML-Tags zu konvertieren?

Anmerkung: Ich brauche die HTML intakt

+0

möglich duplizieren: http://stackoverflow.com/q/1364933/1032370 –

Antwort

-1

zu halten Wenn Sie meinen, nur Text zu konvertieren, dann versuchen Sie dies:

$orig = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>"; 
$str = strip_tags($orig); 

$str = htmlentities($str,ENT_COMPAT,'UTF-8',false); 
0

Ich habe nicht htmlentities vor verwenden, aber es scheint, wie eine etwas robustere Version von Urlencode (die ich oft benutze). Sie könnten versuchen wollen:

htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);

Gerade als kleines Nugget, wenn Sie <br> als Standard carrage Erträge erhalten möchten, können Sie dies tun könnte:

htmlentities(strip_tags(str_replace("<br>","\n",$str,ENT_COMPAT)),'UTF-8',false);

Ich weiß, das ist etwas, Manchmal mache ich gerne.

Viel Glück.

+0

urlencode und htmlentities machen verschiedene sachen: urlencode macht die string gültig in eine url (z. Drehen & in% 26), htmlentities entkommt einem sring für die Verwendung in HTML (z. B. Drehen

6

Haftungsausschluss: Ich würde keine Entitäten codieren, außer für <,> und &. Das heißt, wenn Sie wirklich wollen, dies tun:

$str = '...'; 
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
+1

Ich würde auch mit diesem gehen, die meisten Zeiten gibt es keine Notwendigkeit zu codieren "und". Und Sachen wie €, á, sollte bereits von Unicode behandelt werden. –

+2

Außer dies wird fehlschlagen, wenn er "2> 5 "in seinem Markup – TravisO

+0

@TravisO: Ich erwarte, dass die Eingabe gültige HTML sein wird. Wenn er 2> 5 in seinem Markup hat, wird dies nicht behandelt wie << wird nicht korrekt behandelt. – Evert

1

Das Problem, dass Sie konfrontiert, ist, dass unter Umständen bereits codiert haben ‚<‘ und ‚>‘ in Ihren Text, so dass Sie um sie nach der Konvertierung auszufiltern.

Dies ist auf Evert Antwort ähnlich, aber fügt einen weiteren Schritt für Inhalte wie 1 < 2 in Ihrem Markup zu ermöglichen:

$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false); 
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str); 
$str = str_replace(array('&amp;lt;','&amp;gt'),array('&lt;','&gt;'), $str); 
1

Eine gute Antwort wurde Beitrag von Pascal MARTIN

diese SO topic

anzeigen

Um fortzufahren, können Sie dieses Stück Code verwenden, um eine Liste von Korrespondenzen character => entity zu erhalten:

$list = get_html_translation_table(HTML_ENTITIES); 
unset($list['"']); 
unset($list['<']); 
unset($list['>']); 
unset($list['&']);