2010-04-29 6 views
1

Ok les gars .. J'ai un HTML j'ai besoin d'analyser un script php et de modifier les données autour de ABIT. Pour la meilleure explication, je vais montrer comment je ferais cela dans un script bash en utilisant awk, grep, egrep, et sed à travers un dieu horrible ensemble de tuyaux. A commenté pour plus de clarté.Aide avec les données PHP mangling comme avec sed/awk/grep

curl -s http://myhost.net/mysite/   | \ # retr the document 
     awk '/\/\action/,/submit/'   | \ # Extract only the form element 
     egrep -v "delete|submit"    | \ # Remove the action lines 
     sed 's/^[ \t]*//;s/[ \t]*$//'  | \ # Trim extra whitespaces etc. 
     sed -n -e ":a" -e "$ s/\n//gp;N;b a" | \ # Remove every line break 
     sed '{s|<br />|<br />\n|g}'   | \ # Insert new line breaks after <br /> 
     grep "[email protected]"   | \ # Get lines containing my local email 
     sed '{s/\[[^|]*\]//g}'    | \ # Remove my email from the line 

Ces commandes prennent l'élément de forme qui ressemble à ceci:

<form action="/action" method="post"> 
    <input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php"> 
     http://www.linux.com/rss/feeds.php 
    </a> [email: 
     [email protected] (Default) 
    ]<br />   
    <input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml"> 
     http://www.ubuntu.com/rss.xml 
    </a> [email: 
     [email protected] (Default) 
    ]<br /> 
    <input type="submit" name="delete_submit" value="Delete Selected" /> 

Et il mutile dans les états d'entrée complets d'une ligne .. Prêt à être inséré dans une autre forme:

<input type="checkbox" id="D1" name="D1" /><a href="http://www.linux.com/rss/feeds.php">http://www.linux.com/rss/feeds.php</a> <br /> 
<input type="checkbox" id="D2" name="D2" /><a href="http://www.ubuntu.com/rss.xml">http://www.ubuntu.com/rss.xml</a> <br /> 

La grande question est de savoir comment accomplir cela en PHP? Je suis à l'aise avec l'utilisation de PHP pour enrouler une page ... mais il semble que je suis perdu sur le filtrage de la sortie.

Merci d'avance. :)

Répondre

1

Vous ne filtrez pas la sortie. Vous utilisez simple_html_dom pour analyser et manipuler de cette façon. c'est vraiment plus intuitif.

Quelque chose comme

// Create DOM from URL or file 
$html = file_get_html('...'); 

// Find all a hrefs in a form tag 
foreach($html->find('form a') as $element) 
     echo $element->src . '<br>'; 
+0

Merci - c'est un bon point dans la bonne direction. :) – onemyndseye