2009-08-09 10 views
0

Ich benutze file_get_contents, um einen bestimmten Dateiinhalt zu bekommen. Bis jetzt funktioniert das. Aber dann würde ich die Datei durchsuchen und alle <a href=" durch <a href="site.php?url= ersetzen, bevor Sie die Datei anzeigen. Wie kann ich das machen? Ich weiß, ich sollte eine Art von str_replace oder sogar preg_replace verwenden. Aber ich weiß nicht, wie ich wirklich nach der Datei suche, die ich mit file_get_contents erhalte.PHP str_replace zum Ändern von Linkpfaden

Antwort

1

file_get_contents gibt eine Zeichenfolge zurück, die den Inhalt der Datei enthält.

Sie können also in dieser Zeichenfolge mit der gewünschten Zeichenfolgenmanipulationsfunktion arbeiten, wie Sie sie beschrieben haben.

So etwas wie dies, str_replace verwenden, würde wahrscheinlich tun:

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

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

echo $new_content; 

Aber beachten Sie, es wird nur die URL in das href Attribut ersetzen, wenn das Attribut das erste der <a Tag ist ...

Mit einem Regex könnte Ihnen ein bisschen mehr helfen; aber es wird wahrscheinlich auch nicht perfekt sein, ich fürchte ...

Wenn Sie mit einem HTML-Dokument arbeiten und eine "vollständige" Lösung wollen, könnte die Verwendung von DOMDocument::loadHTML und die Arbeit mit DOM-Manipulationsmethoden eine andere sein (a etwas komplexere, aber wahrscheinlich leistungsfähigere) Lösung.


Die Antworten auf diese beiden Fragen könnten auch in der Lage sein, Ihnen zu helfen, je nachdem, was Sie bereit sind zu tun:


EDIT nach dem Sehen des Kommentars:Wenn Sie zwei Strings ersetzen möchten, können Sie Arrays an die beiden ersten Parameter str_replace übergeben. Zum Beispiel:

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

Damit:

  • '<a href="' durch '<a href="site.php?url=' ersetzt wird
  • und 'Pages' wird durch 'TEST'

ersetzt bekommen und unter Angabe des Handbuchs:

Wenn suchen und ersetzen sind Arrays, dann nimmt str_replace() einen Wert von jedes Array und verwendet sie zu suchen und zu ersetzen Thema.Wenn Ersetzen weniger Werte als Suchen hat, wird eine leere Zeichenfolge für den Rest der Ersatzwerte verwendet. Wenn die Suche ein Array ist und replace eine Zeichenfolge ist, wird diese Ersatzzeichenfolge für jeden Wert der Suche verwendet.

Wenn Sie alle Instanzen ersetzen wollen von ‚<a href="‘, na ja, es ist, was str_replace standardmäßig tut :-)

+0

Ich habe noch eine Frage. Obwohl das eine sehr gute Antwort war, die mir auf dem Weg geholfen hat. Wenn ich 2 Ersatzarbeiten machen möchte, wie würde das funktionieren? 2 Ersatz auf einmal. –

+0

Ich bearbeite meine Antwort mit ein paar weiteren Informationen, die dir vielleicht dabei helfen könnten :-) Viel Spaß! –

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

Achten Sie auf Groß-/Kleinschreibung und komplexere Fälle wie ' luiscubal

+2

Außerdem müssen Sie url code() die URL in der neuen href, sonst werden Sie wahrscheinlich mit anderen Problemen enden. –

0

Wenn Sie das Remote-Dokument auf Ihrer Webseite verwenden möchten, aber die Links, dass halten dokumentieren intakt, besser die BASE element verwenden, um die Basis-URI zu deklarieren:

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

ich denke, das den Trick tun sollte:

  • es ersetzt die href eines Links, egal wo es sich befindet
  • z. arbeitet an < a href = "..", < a style = "" href = "..."
+0

HTML-Attributwerte können einfache '>' Zeichen enthalten. – Gumbo

+0

Ich habe ziemlich viele Websites mit regulären Ausdrücken analysiert, stolperte nie über einen < or > in einem Attributwert. Können Sie mir ein Beispiel zeigen, wenn Sie sich an etwas erinnern könnten? – bisko

+0

\ 2 sollte urlencode'd rechts sein? – Putna

0

Wie der Code von Bisko gesendet, aber, egal über die enclose‘", oder gar nichts in 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

Ja, das ist toll! Aber wie wäre es mit den img-tags? das a und href im preg_replace Und wie wäre es mit all dem in einem? Mit img-tags UND href-tags! Danke für deine Antwort. –