PHP ile köprüleri değiştirin

4 Cevap php

Ben tıklanabilir köprüler içine blog yorum URL'leri açmak için normal bir ifade kullanıyorum. Ancak, ben de tam tersini yapmak istiyorum:

I izin beri belirli html etiketleri (ama <a>), bir köprü biri tipleri, ben onu değiştirmek isterseniz:

<a href="http://www.example.com">My Link</a>

içine

My Link, http://www.example.com

oluşturulan kodudur:

<p><b>My Link:</b> <a href="http://www.example.com" rel="nofollow">http://www.example.com</a></p>

Teşekkürler!

4 Cevap

Bu ile deneyebilirsiniz.

function find_links($url){
    $pattern = '/<a (.*?)href="(.*?)\/\/(.*?)"(.*?)>(.*?)<\/a>/i';
    $url = preg_replace_callback($pattern, 'process_links',$url);
    return $url;
}

function process_links($m){
    return "{$m[5]} <a href=\"{$m[2]}//{$m[3]}\" rel=\"nofollow\">{$m[2]}//{$m[3]}</a>";
}

$links = find_links('<a href="http://www.example.com">My Link</a>');

EDIT: Oops! Ben oldukça OP'ın sorusuna cevap verdi.

Bir düzenli ifade ile düzensiz bir dil ayrıştırma hatası kısa yol. Bunun yerine uygun bir HTML parser kullanın.

Eh, bazı CSS (ve tarayıcılar uygulanması farkları) sakıncası yoksa:

a {font-weight: bold; }
a:after {content: " (" attr(href) ") "; }

Bağlantı metni gösteren ederken bağlantısını kaldırmak değil ama kısmen, kendi amaçlarına ulaşmak olmalıdır. Yani, gerçekten ben öyle değil sanırım. Üzgünüm ...

Sen sadece url bir boşluk ulaşana kadar www veya http ya da o metni dönüştürmek için aramak gerekir.

Something like:
    $startPos = strpos( $input, "http" );
    $endPos = strpos( $input, " ", $startPos );
    $urlText = substr( $input, $startPos, $endPos - $startPos );

Ben ... soru biraz okuyun yukarıdaki yerine arıyor benzer bir şey özledim düşünüyorum.