2017-01-06 7 views
0

必要条件は、ページ上のすべての英語単語の周りにenglishTextクラスを追加することです。問題はthisに似ていますが、Javascriptの解決策は私にとってはうまくいかないでしょう。この問題を解決するにはPHPの例が必要です。あなたが持っている場合たとえば、この:HTML内のすべての英語テキストにクラスを追加しますか?

<p>Hello, 你好</p> 
<div>It is me, 你好</div> 
<strong>你好, how are you</strong> 

は、その後私はで終了する必要があります。

のような、より複雑な場合、あります
<p><span class="englishText">Hello</span>, 你好</p> 
<div><span class="englishText">It is me</span>, 你好</div> 
<strong>你好, <span class="englishText">how are you</span></strong> 

<strong>你好, TEXT?</strong> 
<div>It is me, 你好</div> 

はこれになる必要があります。

<strong>你好, <span class="englishText">TEXT?</span></strong> 
<div><span class="englishText">It is me</span>, 你好</div> 

しかし、私はいったんドキュメントを正しく実際に反復処理する方法を知ったら、これらのエッジケースを整理してください。

ので、私はこの問題を解決するために javascriptを使用することはできません

:これは私はそこに、ページの読み込みに代わりにクラスを持っていることを好むだろうjavascriptの

  • をサポートしていないブラウザ上で動作する必要が

    1. 正しいフォントでテキストをレンダリングするのに遅延がありません。

    PHP Simple HTML DOM Parserを使用すると、ドキュメントを繰り返し処理する最善の方法を見つけました。

    しかし、問題は、私がしようとした場合、この:

    foreach ($html->find('div') as $element) 
    { 
        // make changes here 
    } 
    

    私の懸念は、次のような場合は、原因となるということです混乱:あなたが見ることができるように、それが入るだろう

    <div> 
         Hello , 你好 
         <div>Hello, 你好</div> 
    </div> 
    

    最初のdivと私はそのノードを処理する場合、私はあまりにもノードを処理します。

    これを回避し、ノードを1回だけ選択する方法はありますか?

    UPDATE

    私は私が効果的に必要なことは、私はそれらを反復処理するようにそれらを変更する機能でHTML要素を反復する再帰的な方法であることを今実現しています。

  • +0

    のような行の配列を作成しますので、英語以外のテキストは、すべてのUnicodeになりますか? –

    +0

    * "' 'それは私も、' "* - "英語 "でもなければならない、これは非常にあいまいな問題文です。一般的には、*すべての*テキストノードを反復し、ASCII文字を正規表現し、それに応じてテキストノードを新しいノードセットに置き換えるだけです。 – deceze

    答えて

    0

    あなたはsiblingsあなたがこのような場合にトラブルに取得することはできませんその方法を通って移動しなければならない...

    そのような何か:

    <?php 
    
    foreach ($html->find('div') as $element) 
    { 
        foreach($element->next_sibling() as $sibling){ 
         echo $sibling->plaintext()."\n"; 
        } 
    } 
    
    ?> 
    

    それとも芋もっと簡単な方法:

    ちょうど...preg_replace()"\n"."<*>"

    1. 変更ごと<*>
    2. $lines = explode("\n",$html_string);

    3.

    foreach($lines as $line){ 
         $text = strip_tags($line); 
         echo $text;  
        } 
    
    関連する問題