6

XPath と PHP で Web ページをリート (1337) に変換したい。

これは PHP のみで実行できますが、HTML ノードも leet speak に置き換えられます。

例 ($html は Web ページです):

$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);

これにより、HTML ノードも置き換えられます。

これは、XPath セレクターtext()を使用して XPath と PHP で実行できますか? 例 ($html は Web ページです):

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

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

1 に答える 1

3

これを試して:

$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();

これはおそらく、ニーズに合わせてより便利な xpath クエリであることに注意してください。

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

<head><title>... これは のテキストまたは の子孫であるテキストのみを置換するためです<body>。おそらく、可能なスタイル、Javascript、およびあなたが持っているものを置き換えたくないでしょう。;-)


余談ですが、検索文字と置換文字の配列でこれをテストしましたが、何か怪しいことが起こっていて、わかりません。置換文字は、常に見つかった文字と一致していないようです。それがなぜなのか、私にはわかりません。

私は配列を再作成しました、そしてこれらは私のために働きます:

$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');

なぜあなたの配列が私のために働いていないのか分かりません。:-/ おそらくエンコーディングの問題ですか? 誰かがチャイムを鳴らして推測したい場合は、してください。

編集: rxdazn が気付いたよう"j"."k"に、最初の配列に問題がありましたが、再作成した配列からわかるように、完全に見落としていました ($find を $repl にコピーし、引用符を置き換え、リート文字を埋めました)。

于 2012-11-23T16:04:18.980 に答える