2010-11-27 16 views
0
$content = '<!--<sup><span style="font-weight:bold;color:black;">0</span></sup><br/>--> 
    <div class="popular-video-image"> 
     <a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>"> 
      <img src="/images/topvideo/1.jpg" alt=""/> 
     </a> 
     <span class="popular-video-artist ellipsis"><a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>" class="ellipsis">Far East Movement</a></span> 
     <span class="popular-video-title ellipsis"><a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>" class="ellipsis">Like a G6</a></span> 
    </div>'; 

    $dom = new DOMDocument; 
    $dom->preserveWhiteSpace = false; 
    $dom->loadHTML($content); 
    foreach ($dom->getElementsByTagName('a') as $node) 
    { 
     $node->setAttribute('href', 'http://mysite.ru/' . $node->getAttribute('href')); 
    } 
    $dom->formatOutput = true; 

    echo $dom->saveXml($dom->documentElement); 

Ausgang:PHP DomDocument Echo Problem

<html> 
    <body> 
    <div class="popular-video-image">&#13; 
     <a href="http://mysite.ru/video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="&lt;lang video_go_to=Far East Movement - Like a G6&gt;">&#13; 
      <img src="/images/topvideo/1.jpg" alt=""/></a>&#13; 
     <span class="popular-video-artist ellipsis"><a href="http://mysite.ru/video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="&lt;lang video_go_to=Far East Movement - Like a G6&gt;" class="ellipsis">Far East Movement</a></span>&#13; 
     <span class="popular-video-title ellipsis"><a href="http://mysite.ru/video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="&lt;lang video_go_to=Far East Movement - Like a G6&gt;" class="ellipsis">Like a G6</a></span>&#13; 
    </div> 

    </body> 
</html> 

Ich will nicht Tags html und Körper hinzuzufügen. Auch wollen nicht ersetzt zu &lt;lang&gt;. And &#13; ist auch nicht notwendig.

ich solche Inhalte empfangen möchten, die am Eingang war, nur mit Links geändert ..

Sorry für schlechtes Englisch!

Antwort

0

Ich denke, dass die <html> und <body> Tags in platziert werden, weil Sie verwenden. Verwenden Sie stattdessen loadXML.

Wie für &lt;lang&gt;, hat es ersetzt werden, da sonst die resultierende XML nicht gültig wäre. Wenn es Ihnen Probleme verursacht, sollten Sie Ihren Ansatz ein wenig ändern und damit arbeiten, nicht dagegen.

+0

loadXML nichts außer Fehler anzeigen – Isis

+0

Nun, vielleicht können die Fehler behoben werden ? :) – Jon

+0

Ich brauche einen Ausweg mit DomDocument – Isis

3

saveXml verwendet einen optionalen Parameter, mit dem Sie den auszugebenden Knoten angeben können.

$dom->saveXml($dom->documentElement->firstChild->firstChild); 

Dies wird die HTML-und Body-Tags aus der Ausgabe entfernen.

+0

Hinweis: Benötigt PHP> = 5.3.6 –

0
<?php 
    $content = '<!--<sup><span style="font-weight:bold;color:black;">0</span></sup><br/>--> 
    <div class="popular-video-image"> 
     <a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>"> 
      <img src="/images/topvideo/1.jpg" alt=""/> 
     </a> 
     <span class="popular-video-artist ellipsis"><a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>" class="ellipsis">Far East Movement</a></span> 
     <span class="popular-video-title ellipsis"><a href="video/Far+East+Movement - Like+a+G6/w4s6H4ku6ZY/" title="<lang video_go_to=Far East Movement - Like a G6>" class="ellipsis">Like a G6</a></span> 
    </div>'; 

    $dom = new DOMDocument; 
    $dom->preserveWhiteSpace = false; 
    $dom->loadHTML($content); 
    foreach ($dom->getElementsByTagName('a') as $node) 
    { 
     $node->setAttribute('href', 'http://mysite.ru/' . $node->getAttribute('href')); 
    } 
    $dom->formatOutput = true; 

    echo preg_replace('#^<!DOCTYPE.+?>#', '', str_replace(array('<html>', '</html>', '<body>', '</body>', "\n\n", '&lt;', '&gt;'), array('', '', '', '', '', '<', '>',), $dom->saveHTML())); 
4

Sie sehen &#13; am Ende jeder Zeile, weil Ihre HTML Windows-style line endingsCR+LF hat. Um sie loszuwerden, führen Sie diese auf, bevor Sie es in DOMDocument — füttern wandeln sie in die Unix-Zeilenenden LF:

$content = preg_replace('/\r\n/', "\n", $content);