2009-08-09 5 views
0

私はfile_get_contentsを使用して特定のファイルの内容を取得しています。今のところそれは働いています。しかし、私はそのファイルを検索して、ファイルを表示する前にすべて<a href="<a href="site.php?url=に置き換えたいと思うでしょう。これどうやってするの?私はstr_replace、またはpreg_replaceの何らかの種類を使うべきであることを知っています。しかし、私は実際に検索する方法を知らないし、私はfile_get_contentsとなっているファイルのためにそれを行う。リンクパスを変更するPHP str_replace

答えて

1

file_get_contentsは、ファイルの内容を含む文字列を返します。

したがって、あなたが話したような任意の文字列操作関数を使用して、この文字列で作業することができます。

...

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

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

echo $new_content; 

をしかし、その属性が<aタグの最初のものであるとき、それは唯一のhref属性にURLを置き換えます注意:str_replaceを使用して

このような何か、おそらくだろう

正規表現を使用するとの可能性があります。はもう少しお手伝いします。しかし、恐らく完全ではないでしょう...

を使用して、DOM操作方法を使用することは別の方法である可能性があります。もう少し複雑ですが、おそらくより強力な)ソリューションです。


これら二つの質問に与えられた答えはまた、あなたが行うことを喜んでいるものに応じて、あなたを助けることができるかもしれない:


EDITコメントを見た後:

2つの文字列を置き換える場合は、2つの最初のパラメータstr_replaceに配列を渡すことができます。それと

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

  • '<a href="' '<a href="site.php?url='
  • と 'Pagesは' 'TEST'

に置き換えられてしまいますによって置き換えされ、例えば、マニュアルを引用する:

検索と置換が配列の場合、 str_replace()は、配列 から値を受け取り、それらを使用して の検索を行い、件名に置き換えます。 の代わりに検索よりも値が小さい場合は、 置換値の残りの部分に空文字列 が使用されます。検索が の配列で、replaceが文字列の場合、 この置換文字列は、検索のすべての値 に使用されます。

あなたが「<a href="」のすべてのインスタンスを置き換えたい場合は、あなたのウェブサイト上でリモートドキュメントを使用しますが、そのリンクを維持したい場合は、まあ、それはstr_replace

+0

もう1つ質問があります。これは途中で私を助けた非常に良い答えでしたが、 2つの置換えをしたいのであれば、どうすればいいでしょうか?一度に2回交換。 –

+0

私はいくつかの情報で私の答えを編集しています。 –

4
$text = file_get_contents('some_file'); 
$text = str_replace('<a href="', '<a href="site.php?url=', $text); 
+0
+2

また、新しいhrefのURLをurlencode()する必要があります。そうしないと、おそらく他の問題が発生します。 –

0

:-)デフォルトで何をするかですそのまま文書、優れたベースURIを宣言するBASE elementを使用します。

<base href="http://example.com/path/to/remote/document"> 
1
$new_content = preg_replace('!(<a\s*[^>]*)href="([^"]+)"!','\1 href="site.php?url=\2"', $content); 

私は、これはトリックを行うべきだと思う。

  • リンクのhrefは、どこにあるかにかかわらず、
  • となります。 < HREFの作品= ".."、<スタイル= "" のhref = "..."
+0

HTML属性値には、プレーンな '> '文字を含めることができます。 – Gumbo

+0

私は正規表現でかなり多くのウェブサイトを解析してきましたが、属性値の< or >を見つけたことはありませんでした。もしあなたが何かを思い出すことができたら、私に例を教えてください。 – bisko

+0

\ 2は正しいでしょうか? – Putna

0

biskoにより送信されたコードが、囲む程度に関係なく」、同様に "HREFでオア・ナッシング

$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); 
+0

です。素晴らしいですが、imgタグでも同じことをやってみましょうか? preg_replaceにaとhrefを入れてください。そしてimg-tagsとhref-tagsを使って、すべてのことをやってみましょう! –