2012-11-23 10 views
6

Ich möchte eine Webseite in Leet (1337) mit XPath und PHP zu sprechen.Konvertieren von HTML-Text in Leet (1337) Sprechen mit XPath

Es kann nur mit PHP gemacht werden, aber dann werden auch die HTML-Knoten durch leet speak ersetzt.

Beispiel ($ html ist die Webseite):

$find = array("a","b","c","d","e","f","g","h","i","j"."k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); 
$repl = array("4","b","c","d","3","f","g","h","1","j","k","1","m","n","0","p","9","r","5","7","u","v","w","x","y","2"); 
$html = str_replace($find, $repl, $html); 

, die auch den HTML-Knoten ersetzt.

Kann dies mit XPath und PHP mit dem XPath-Selektor gemacht werden text()? Beispiel ($ html ist die Webseite):

$dom = new DOMDocument(); 
$dom->loadHTML($html); 

$xpath = new DOMXPath($dom); 
$xpath->query('//text()'); 
\\HERE THE REPLACING IN XPATH 
+0

Ich denke, 'text()' wird den gesamten Text auf Ihrer Seite zurückgeben, aber Sie können es nicht aktualisieren .. – j0k

+0

Doing dies mit Javascript würde viel mehr Spaß machen meiner Meinung nach dann können Sie ein Bookmarklet machen oder so. –

Antwort

3

Versuchen Sie folgendes:

$dom = new DOMDocument; 
$dom->loadHTML($html); 
$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//text()'); 
foreach($nodes as $node) 
{ 
    $node->nodeValue = str_replace($find, $repl, $node->nodeValue); 
} 
echo $dom->saveHTML(); 

Hinweis, dass dies wahrscheinlich eine nützliche XPath-Abfrage für Ihre Bedürfnisse:

$nodes = $xpath->query('//head/title/text() | //body//text()'); 

... da dies nur Text in <head><title> oder Text von <body> ersetzt. Wahrscheinlich würde ich nicht wollen, mögliche Stile, Javascript und was haben Sie zu ersetzen. ;-)


Auf einer seitlichen Anmerkung: Ich habe getestet dies mit Arrays von Zeichen suchen und ersetzen, aber es ist etwas faul mit ihnen los ist, dass ich nicht herausfinden kann. Die Ersatzzeichen scheinen nicht ständig mit den gefundenen Zeichen übereinzustimmen. Ich habe keine Ahnung, warum das so ist.

Ich habe die Arrays neu erstellt, und diese Arbeit für mich:

$find = array('a','b','c','d','e','f','g','h','i','j'.'k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); 
$repl = array('4','b','c','d','3','f','g','h','1','j'.'k','1','m','n','0','p','9','r','5','7','u','v','w','x','y','2'); 

Ich kann einfach nicht herausfinden, warum Ihre Arrays nicht arbeiten für mich sind. : -/Vielleicht ein Problem mit der Codierung? Wenn irgendjemand hereinspielen und eine Vermutung wagen möchte, dann tu es bitte.

Edit: Als rxdazn bemerkte, "j"."k" war das Problem in der ersten Array, die ich völlig übersehen, wie Sie von meinen neu erstellten Arrays sehen können (Ich kopierte $ find über $ repl, ersetzt Zitate und füllte die Leet-Zeichen).

+5

'" j "." K "' hier ist was falsch in der ersten Array – rxdazn

+1

@rxdazn schönen Fang! –

+1

Als eine Randnotiz könnten Sie auch range() '$ find = range (" a "," z ");' – HamZa