2010-11-21 17 views
1

aşağıda linkini var ki? Str_replace kullandım, ancak bu ideal olmayan tüm altçizgi kaldırır. Etiketlerinin içine metni almak için bir HTML DOM parser kullanın ve sonra üzerinde str_replace() fonksiyonunu çalıştırabilirsiniz çok,str_replace

<li class="hook"> 
     <a href="i_have_underscores">I have underscores</a> 
</li> 

Herhangi bir yardım

+0

* (ilgili) * [En Yöntemleri HTML ayrıştırmak için] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

cevap

2

HTML'yi, regex yerine DOMDocument ile ayrıştırmak daha güvenlidir.

<?php 

function replaceInAnchors($html) 
{ 
    $dom = new DOMDocument(); 
    // loadHtml() needs mb_convert_encoding() to work well with UTF-8 encoding 
    $dom->loadHtml(mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8")); 

    $xpath = new DOMXPath($dom); 

    foreach($xpath->query('//text()[(ancestor::a)]') as $node) 
    { 
     $replaced = str_ireplace('_', ' ', $node->wholeText); 
     $newNode = $dom->createDocumentFragment(); 
     $newNode->appendXML($replaced); 
     $node->parentNode->replaceChild($newNode, $node); 
    } 

    // get only the body tag with its contents, then trim the body tag itself to get only the original content 
    return mb_substr($dom->saveXML($xpath->query('//body')->item(0)), 6, -7, "UTF-8"); 
} 

$html = '<li class="hook"> 
     <a href="i_have_underscores">I_have_underscores</a> 
</li>'; 
echo replaceInAnchors($html); 
6

takdir:

Yani temelde bu çıkışı ile kalırdı sonuç.


böyle bir şey kadar basittir, ben bağlantılı DOM Ayrıştırıcı kullanma: bu kadar

$html = str_get_html(
    '<li class="hook"><a href="i_have_underscores">I_have_underscores</a></li>'); 
$links = $html->find('a'); // You can use any css style selectors here 

foreach($links as $l) { 
    $l->innertext = str_replace('_', ' ', $l->innertext) 
} 

echo $html 
//<li class="hook"><a href="i_have_underscores">I have underscores</a></li> 

.

+0

: Bu kodu deneyin Teşekkürler, sitenin hangi bölümüne bakmalıyım? –

+0

Ön sayfada, "Download and Documentation" bölümündeki iki bağlantıya göz atmak isteyeceksiniz. – BudgieInWA

+0

Bana göre daha yavaş (makinemde 30ms vs 1ms), benim için en iyi yaklaşım gibi görünüyor. "// text() [(acestor :: a)]" xPath sorgusu). –

İlgili konular