2010-05-16 9 views
2

Salut les gars J'utilise cette classe merveilleuse ici pour faire un peu de filtrage incorporé de code: http://simplehtmldom.sourceforge.net/. Il étend la classe de document PHP DOM. À peu près ce que je fais est d'analyser une chaîne à travers cette classe qui contient le code intégré, je prends les bits d'information uniques, par exemple id, width, height send à travers une fonction gestionnaire qui insère l'ID, la largeur, la hauteur, etc. mon modèle prédéfini "sécurisé" et réinsérer mon modèle sécurisé à la place du code d'intégration que l'utilisateur a mis. Peut sembler une manière arriérée de le faire mais c'est la façon dont il doit être fait :)PHP Simple DOM Parser

Tout cela fonctionne bien. Le problème est quand il y a plus que du code d'intégration contenu dans la chaîne, car je ne peux pas simplement remplacer le code d'intégration je peux seulement remplacer la chaîne entière qui efface le reste de la chaîne de balises etc. Par exemple, s'il y avait un tag p qui serait effacé.

Donc, ma question est de savoir comment utiliser cette classe puis-je simplement remplacer la partie de la chaîne? J'ai passé les derniers jours à essayer de résoudre ce problème et j'ai besoin de plus d'informations. Il semble que la classe puisse le faire, donc je suis perplexe.

est ici une version de base de ce que j'ai à ce jour :)

// load the class 
    $html = new simple_html_dom(); 

    // load the entire string containing everything user entered here 
    $return = $html->load($string); 

    // check for embed tags 
    if($html->find('embed') == true 
    { 
     foreach($html->find('embed') as $element) 
     { 
       // send it off to the function which returns a new safe embed code 
       $element = create_new_embed($parameters); 

       // this is where i somehow i need to save the changes and send it back to $return 
     } 
    } 

Toute contribution serait grandement appréciée. Si je l'ai expliqué assez bien mon problème s'il vous plaît laissez-moi savoir :)

Répondre

4

Lorsque vous faites ceci:

foreach($html->find('embed') as $element) 

Vous créez un objet élément simpleHTMLdom - ne est pas une variable simple, vous pouvez simplement utiliser comme affectation. Pour exmaple, si l'élément est:

<embed>Some Embed Code Here</embed> 

Vous pouvez le modifier en procédant comme suit:

$element->innertext = "Hello world"; 
# the element is now <embed>Hello world</embed> 

de si vous voulez changer complètement l'élément:

$element->outertext = "<p>Now I'm a paragraph</p>"; 

et vous 'ai remplacé l'intégration entièrement.

+0

Bien sûr, c'était évident. Merci beaucoup. –

+0

Merci pour votre réponse rapide aussi! –

+1

Pas de problème. Si cela répond à votre question, pensez à cliquer sur la petite coche qui signifie ... cela répond au mieux à votre question :-) Et bienvenue dans Stackoverflow. – Erik

Questions connexes