2010-03-19 2 views
0

Comment obtenir un code source de page html sans tags htl? Par exemple:html au texte avec la classe domdocument

<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
<meta http-equiv="content-language" content="hu"/> 
<title>this is the page title</title> 
<meta name="description" content="this is the description" /> 
<meta name="keywords" content="k1, k2, k3, k4" /> 
start the body content 
<!-- <div>this is comment</div> --> 
<a href="open.php" title="this is title attribute">open</a> 
End now one noframes tag. 
<noframes><span>text</span></noframes> 
<select name="select" id="select"><option>ttttt</option></select> 
<div class="robots-nocontent"><span>something</span></div> 
<img src="url.png" alt="this is alt attribute" /> 

J'ai besoin de ce résultat:

this is the page title this is the description k1, k2, k3, k4 start the body content this is title attribute open End now one noframes tag. text ttttt something this is alt attribute 

Je dois aussi le titre et les attributs alt. Idée?

Répondre

0

Cela ne peut pas être effectué de manière automatisée. PHP ne peut pas savoir quels attributs de noeud vous voulez omettre. Vous deviez soit créer un code qui itère sur tous les attributs et les textnodes que vous pouvez alimenter une carte, définissant quand utiliser le contenu d'un nœud ou simplement choisir ce que vous voulez avec XPath un par un.

Une alternative serait d'utiliser XMLReader. Il vous permet de parcourir tout le document et de définir des rappels pour les noms d'éléments. De cette façon, vous pouvez définir quoi faire avec quel élément. Voir

0

Vous pouvez le faire avec une expression régulière.

$regex = '/\<.\>/'; 

serait un début très simple d'enlever quoi que ce soit avec < et > autour d'elle. Mais pour ce faire, vous devrez utiliser le code HTML comme file_get_contents() ou une autre fonction qui transformera le code en texte.

Addendum:

Si vous voulez des attributs individuels tirés aussi bien, vous allez devoir écrire un regex plus complexe pour tirer ce texte sur. Par exemple:

$regex2 = '/\<.(?<=(title))(\=\").(?=\")/'; 

tirerais (je pense ... Je suis encore à apprendre RegEx) tout texte entre < et title=", en supposant avait pas d'autres expressions correspondant avant que le titre. Encore une fois, ce serait un processus regex assez compliqué.

+0

il veut conserver le contenu de l'attribut. S'il voulait supprimer des éléments, il pourrait simplement utiliser strip_tags – Gordon

+0

Right, mais il s'agit juste de faire correspondre les attributs qu'il veut. Ce n'est pas facile, mais il est certainement possible de le faire de façon automatisée via PHP. – dclowd9901

+0

Handcrafting ceci n'est pas automatisé. Utiliser aussi regex pour analyser XML est le chemin de la folie. Regex n'a aucune idée sur les nœuds ou les attributs. L'analyse XML n'est pas ce que Regex est pour. – Gordon

0

Ma solution est un peu plus compliquée mais ça a bien marché pour moi.

Si vous êtes sûr d'avoir XHTML, vous pouvez simplement considérer le code comme XML (mais vous devez tout mettre dans un emballage approprié). Puis, avec XSLT, vous pouvez définir des modèles de base qui répondent à vos besoins.