texto special remove htmlspecialchars_decode htmlentities escape ejemplo characters php html-encode

php - remove - ¿Cómo eliminar html special chars?



php texto a html (14)

Estoy creando un archivo de strip_tags RSS para mi aplicación en el que quiero eliminar etiquetas HTML, lo que hace strip_tags . Pero strip_tags no está eliminando caracteres especiales de código HTML:

  & ©

etc.

Por favor dígame cualquier función que pueda usar para eliminar estos códigos especiales de mi cadena.


Además de las buenas respuestas anteriores, PHP también tiene una función de filtro incorporada que es bastante útil: filter-var.

Para eliminar caracteres HMTL, use:

$cleanString = filter_var($dirtyString, FILTER_SANITIZE_STRING);

Más información:

  1. function.filter-var
  2. filter_sanitize_string

Es posible que desee echar un vistazo a htmlentities () y html_entity_decode () here

$orig = "I''ll /"walk/" the <b>dog</b> now"; $a = htmlentities($orig); $b = html_entity_decode($a); echo $a; // I''ll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now echo $b; // I''ll "walk" the <b>dog</b> now


Esto podría funcionar bien para eliminar caracteres especiales.

$modifiedString = preg_replace("/[^a-zA-Z0-9_.-/s]/", "", $content);


La función que utilicé para realizar la tarea, uniendo la actualización realizada por schnaader es:

mysql_real_escape_string( preg_replace_callback("/&#?[a-z0-9]+;/i", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, strip_tags($row[''cuerpo''])))

Esta función elimina cada etiqueta html y símbolo html, convertido en UTF-8 listo para guardar en MySQL


Lo que hice fue utilizar: html_entity_decode , luego usar strip_tags para eliminarlos.


O descifrarlos usando html_entity_decode o eliminarlos usando preg_replace :

$Content = preg_replace("/&#?[a-z0-9]+;/i","",$Content);

(De here )

EDITAR: Alternativa según el comentario de Jacco

podría ser bueno reemplazar el ''+'' con {2,8} o algo así. Esto limitará la posibilidad de reemplazar oraciones enteras cuando un ''&'' no codificado esté presente.

$Content = preg_replace("/&#?[a-z0-9]{2,8};/i","",$Content);


Parece que lo que realmente quieres es:

function xmlEntities($string) { $translationTable = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); foreach ($translationTable as $char => $entity) { $from[] = $entity; $to[] = ''&#''.ord($char).'';''; } return str_replace($from, $to, $string); }

Reemplaza a las entidades nombradas con su número equivalente.



Si desea convertir los caracteres especiales HTML y no solo eliminarlos, desmantelar y preparar el texto plano, esta fue la solución que funcionó para mí ...

function htmlToPlainText($str){ $str = str_replace(''&nbsp;'', '' '', $str); $str = html_entity_decode($str, ENT_QUOTES | ENT_COMPAT , ''UTF-8''); $str = html_entity_decode($str, ENT_HTML5, ''UTF-8''); $str = html_entity_decode($str); $str = htmlspecialchars_decode($str); $str = strip_tags($str); return $str; } $string = ''<p>this is (&nbsp;) a test</p> <div>Yes this is! &amp; does it get "processed"? </div>'' htmlToPlainText($string); // "this is ( ) a test. Yes this is! & does it get processed?"`

html_entity_decode con ENT_QUOTES | ENT_XML1 convierte cosas como &#39; htmlspecialchars_decode convierte cosas como &amp; html_entity_decode convierte cosas como ''&lt; y strip_tags elimina cualquier etiqueta HTML sobrante.

EDITAR - Se agregó str_replace ('''', '''', $ str); y varias otras html_entity_decode () como pruebas continuas han demostrado que las necesitan.


Una forma simple de cadenas de vainilla para hacerlo sin tener que utilizar el motor de expresiones regulares pregráficas:

function remEntities($str) { if(substr_count($str, ''&'') && substr_count($str, '';'')) { // Find amper $amp_pos = strpos($str, ''&''); //Find the ; $semi_pos = strpos($str, '';''); // Only if the ; is after the & if($semi_pos > $amp_pos) { //is a HTML entity, try to remove $tmp = substr($str, 0, $amp_pos); $tmp = $tmp. substr($str, $semi_pos + 1, strlen($str)); $str = $tmp; //Has another entity in it? if(substr_count($str, ''&'') && substr_count($str, '';'')) $str = remEntities($tmp); } } return $str; }


Use html_entity_decode para convertir entidades HTML.

Deberá configurar el juego de caracteres para que funcione correctamente.


prueba esto

<?php $str = "/x8F!!!"; // Outputs an empty string echo htmlentities($str, ENT_QUOTES, "UTF-8"); // Outputs "!!!" echo htmlentities($str, ENT_QUOTES | ENT_IGNORE, "UTF-8"); ?>


$string = "äáčé"; $convert = Array( ''ä''=>''a'', ''Ä''=>''A'', ''á''=>''a'', ''Á''=>''A'', ''à''=>''a'', ''À''=>''A'', ''ã''=>''a'', ''Ã''=>''A'', ''â''=>''a'', ''Â''=>''A'', ''č''=>''c'', ''Č''=>''C'', ''ć''=>''c'', ''Ć''=>''C'', ''ď''=>''d'', ''Ď''=>''D'', ''ě''=>''e'', ''Ě''=>''E'', ''é''=>''e'', ''É''=>''E'', ''ë''=>''e'', ); $string = strtr($string , $convert ); echo $string; //aace


<?php function strip_only($str, $tags, $stripContent = false) { $content = ''''; if(!is_array($tags)) { $tags = (strpos($str, ''>'') !== false ? explode(''>'', str_replace(''<'', '''', $tags)) : array($tags)); if(end($tags) == '''') array_pop($tags); } foreach($tags as $tag) { if ($stripContent) $content = ''(.+</''.$tag.''[^>]*>|)''; $str = preg_replace(''#</?''.$tag.''[^>]*>''.$content.''#is'', '''', $str); } return $str; } $str = ''<font color="red">red</font> text''; $tags = ''font''; $a = strip_only($str, $tags); // red text $b = strip_only($str, $tags, true); // text ?>