Tengo un archivo .txt. Usando el siguiente código lo leí:
while (!feof($handle)) { yield trim(utf8_encode(fgets($handle))); }Ahora, de la cadena recuperada, quiero eliminar no solo las etiquetas HTML, sino también el contenido HTML del interior. Encontré muchas soluciones para eliminar las etiquetas, pero no ambas: etiquetas + contenido.
Cadena de muestra - Hey my name is <b>John</b>. I am a <i>coder</i>!
Cadena de salida requerida: Hey my name is . I am a !
¿Cómo puedo conseguir esto?
Una forma de lograr esto es usando DOMDocument y DOMXPath . Mi solución asume que la cadena HTML proporcionada no tiene un nodo contenedor o que el contenido del nodo contenedor no debe eliminarse (ya que esto daría como resultado una cadena completamente vacía).
$string = 'Hey my name is <b>John</b>. I am a <i>coder</i>!'; // create a DOMDocument (an XML/HTML parser) $dom = new DOMDocument('1.0', 'UTF-8'); // load the HTML string without adding a <!DOCTYPE ...> and <html><body> tags // and with error/warning reports turned off // if loading fails, there's something seriously wrong with the HTML if($dom->loadHTML($string, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED | LIBXML_NOERROR | LIBXML_NOWARNING)) { // create an DOMXPath instance for the loaded document $xpath = new DOMXPath($dom); // remember the root node; DOMDocument automatically adds a <p> container if one is not present $rootNode = $dom->documentElement; // fetch all descendant nodes (children and grandchildren, etc.) of the root node $childNodes = $xpath->query('//*', $rootNode); // with each of these decendants... foreach($childNodes as $childNode) { // ...remove them from their parent node $childNode->parentNode->removeChild($childNode); } // echo the sanitized HTML echo $rootNode->nodeValue . "\n"; } Si desea eliminar un código de contenedor potencial, será un poco más difícil, porque es difícil diferenciar entre un nodo de contenedor original y un nodo de contenedor que DOMDocument agrega automáticamente.
Además, si se encuentra una etiqueta de no cierre involuntaria, puede generar resultados inesperados, ya que eliminará todo hasta la siguiente etiqueta de cierre, porque DOMDocument agregará automáticamente una etiqueta de cierre para las etiquetas de no cierre no válidas.