Bağlantı yolları değiştirmek için PHP str_replace

4 Cevap php

I file_get_contents, belirli bir dosya içeriğini almak için kullanıyorum. Şimdiye kadar o çalışıyor. Ama sonra dosyayı arama ve dosyayı göstermeden önce <a href="site.php?url= tüm <a href=" olarak değiştirin isterim. Bunu nasıl yapabilirim? Ben str_replace ya da preg_replace çeşit kullanmak gerektiğini biliyorum. Ama aslında arama ve ben file_get_contents ile alıyorum dosyası için bunu yapmak için nasıl bilmiyorum.

4 Cevap

file_get_contents dosyanın içeriğini içeren bir dize döndürür.

Yani, sözedenlerin gibi, istediğimiz hangisi dize işleme işlevini kullanarak bu dize çalışabilirsiniz.

Böyle bir şey, str_replace kullanarak, muhtemelen yapacağını:

$content = file_get_contents('http://www.google.com');

$new_content = str_replace('<a href="', '<a href="site.php?url=', $content);

echo $new_content;

Ama bu özellik <a etiketinin ilk olduğunda sadece href özelliğinde URL'sini değiştirmek unutmayınız ...

, Bir regex might biraz daha size yardımcı kullanma ama muhtemelen korkarım ya, mükemmel olmayacaktır ...

Bir HTML belgesi ile çalışan ve kullanan bir "tam" bir çözüm istiyorum, DOMDocument::loadHTML ve DOM işleme yöntemleri ile çalışıyorsanız başka olacak (biraz daha karmaşık, ama muhtemelen daha güçlü) bir çözüm olabilir.


The answers given to those two questions might also be able to help you, depending on what you are willing to do :


EDIT Yorum gördükten sonra:

Iki dizeleri değiştirmek isterseniz, str_replace, ilk iki parametrelerine diziler iletebilirsiniz. Örneğin:

$new_content = str_replace(
    array('<a href="', 'Pages'), 
    array('<a href="site.php?url=', 'TEST'), 
    $content);

Bunun üzerine:

  • '<a href="' <a href="site.php?url= ile değiştirilecektir
  • ve 'Pages' TEST 'yerini alacak

Ve, manuel alıntı:

If search and replace are arrays, then str_replace() takes a value from each array and uses them to do search and replace on subject . If replace has fewer values than search , then an empty string is used for the rest of replacement values. If search is an array and replace is a string, then this replacement string is used for every value of search .

Eğer '<a href="', iyi, str_replace varsayılan :-) tarafından ne var tüm örneklerini değiştirmek istiyorsanız

$new_content = preg_replace('!(<a\s*[^>]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content);

Ben bu hile yapmak gerektiğini düşünüyorum:

  • Bir bağlantı href, hangi konumda olursa olsun yerini
  • örneğin = "..",

Eğer web sitenizde uzak belge kullanmak ama sağlam bu belgenin bağlantıları tutmak istiyorsanız, daha iyi bir taban URI bildirmek için BASE elemanı kullanın:

<base href="http://example.com/path/to/remote/document">

Bisko ama, içine alın 'hakkında hiçbir madde tarafından gönderilen kodu, "ya href şey gibi

$text = '<a href="http://www.europanet.com.br">Europanet</a>     <a target="_blank" href=\'http://www.webjump.com.br\'>Webjump</a>
<a id="link" href=http://www.euforia.com.br target="_top">Euforia</a>';
$text = preg_replace('|(<a\s*[^>]*href=[\'"]?)|','\1site.php?url=', $text);