HTML varlıkları kodlayan ancak HTML etiketlerini görmezden - PHP

5 Cevap php

Ben bu gibi görünebilir bir dize var

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

Nasıl ben metin HTML etiketlerini dönüştürme olmadan HTML kişilere dönüştürebilirsiniz?

note: I need to keep the HTML intact

5 Cevap

Yasal Uyarı: <> ve ve dışında, herhangi bir varlıkları kodlamak olmaz. Yani gerçekten bu istiyorsanız, bunu, şöyle dedi:

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

Sorun, sen yüz, koşullar altında zaten '<' kodlanmış ve '>' metin içinde olduğunu, bu nedenle dönüşüm sonra bunları filtre var.

Bu Evert cevabı benzer, ancak biçimlendirme 1 < 2 gibi bir içerik sağlamak için bir adım daha ekliyor:

$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);

Sadece metni dönüştürmek demek, o zaman bu deneyin:

$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);

Ben daha önce htmlentitiesi kullanmak değil, ama urlencode biraz daha sağlam versiyonu (ben çok kullanan) gibi görünüyor. Eğer denemek isteyebilirsiniz:

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

Eğer korumak istiyorsanız, sadece küçük bir külçe gibi, <br> standart carrage döner gibi, bunu yapabilirsiniz:

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

Ben bazen yapmak gibi bir şey olduğunu biliyorum.

İyi Şanslar.

İyi bir cevap Pascal MARTIN tarafından konu

Bu bak SO topic

Devam ettirmek için, yazışmalarınında bir listesini almak için, bu kod parçası kullanın character => entity yapabilirsiniz:

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