Sayfanın tüm köprüler bir dize eklemek için preg_replace fonksiyonu

4 Cevap php

i bağlantıları varsa, örneğin ... bir sayfadaki tüm köprüler için kendi değer eklemek istiyorum:

<a href="abc.htm?val=1">abc 1</a> <br/>
<a href="abc.htm?val=2">abc 1</a> <br/>
<a href="abc.htm?val=3">abc 1</a> <br/>
<a href="abc.htm?val=4">abc 1</a> <br/>

Ben tüm köprüler için "type = int" gibi sonraki VAR eklemek istiyorum

çıkışı olmalıdır:

<a href="abc.htm?val=1&type=int">abc 1</a> <br/>
<a href="abc.htm?val=2&type=int">abc 1</a> <br/>
<a href="abc.htm?val=3&type=int">abc 1</a> <br/>
<a href="abc.htm?val=4&type=int">abc 1</a> <br/>

Ben preg_replace fonksiyonu ile oldukça kolayca yapılabilir umut

4 Cevap

Sadece href öznitelik değişkeni ekleme meselesi varsa, o zaman bu işe:

#                                              v-- &amp; instead of & for W3C validation
preg_replace('/(<a\\s+[^>]+href="[^"]*)(")/', '${1}&amp;type=int$2', $page_src);

Onun içinde, kod-tahammül isteyen Ama eğer href="index.php" href="index.php?type=int" dönüştü alır ve değil href="index.php&type=int", daha sonra bazı ekstra denetimi gerekir:

function process_link_matches ($matches) {
    # get rid of full matching string; all parts are already covered
    array_shift($matches);

    if (preg_match('/\\?[^"]/', $matches[2])) {
        # link already contains $_GET parameters
        $matches[1] .= '&type=int';
    } else {
        # starting a new list of parameters
        $matches[1] .= '?type=int';
    }

    return implode($matches);
}

$page_src = preg_replace_callback('/(<a\\s+[^>]+href=")([^"]*)("[^>]*>)/', 
    'process_link_matches', $page_src);

Bu output buffer kullanımı ve output_add_rewrite_var to do that. You might need to adjust url_rewriter.tags to only rewrite the href a elemanlarının özellikleri olabilir.

Ben bir sıradanifade uzman değilim, ama oturumları veya çerezleri kullanarak düşünmek gerekir gibi bu sesler ...

Sen kullanabilirsiniz

preg_replace('/(\<a [^>]*href=")([^"]*)"/i', '&\1\2type=int"', page);

Bu keyfi html dosyaları kırmak için muhtemel olduğunu, ancak, uyardı olun. Ben sadece bir atış operasyonu olarak HTML manipülasyon için Regex kullanmanızı tavsiye ediyorum. Eğer daha sık bunu yapmak gerekirse, veya dosyaları bir sürü, bir HTML çözümleyici kullanmayı düşünün.