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
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 :-)
$text = file_get_contents('some_file');
$text = str_replace('<a href="', '<a href="site.php?url=', $text);
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">
$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 = "..."
HTML-Attributwerte können einfache '>' Zeichen enthalten. – Gumbo
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
\ 2 sollte urlencode'd rechts sein? – Putna
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);
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. –
- 1. str_replace HTML mit PHP
- 2. PHP Multi Byte str_replace?
- 3. PHP str_replace Fehler
- 4. php Str_replace Funktion
- 5. Wie ersetzt man "\" mit str_replace() in PHP?
- 6. PHP str_replace() - Ersetzen durch Leerzeichen Alternative?
- 7. Kann nicht ein PHP str_replace() ausrechnen Komma
- 8. PHP str_replace() mit mehreren Parametern auf Bedingung
- 9. Kann str_replace() nicht zum Entfernen von Leerzeichen in einer PHP-Zeichenkette verwenden
- 10. Was ist der richtige Weg, bis zum Ende von string in PHP str_replace?
- 11. Warum verursacht 'str_replace() von PHP Fehler bei der Codierung?
- 12. PHP Funktion zum Ersetzen von Symbolen durch Zeichencodes zum Stoppen von SQL Injection
- 13. Regex str_replace
- 14. str_replace in Lisp?
- 15. str_replace mit Array
- 16. PHP - Regex zum Entfernen von Anführungszeichen und Klammern hinzufügen?
- 17. str_replace für dynamische Form
- 18. str_replace &: Konvertieren & zu seinem & Zeichen in PHP
- 19. über SQL und str_replace Funktion
- 20. Wie str_replace tick charset
- 21. str_replace in SQL UPDATE?
- 22. So verwenden str_replace in Smarty
- 23. Verwenden der PHP-Schnittstelle zum Ändern von HTML
- 24. php - Ändern von Dateiberechtigungen
- 25. str_replace Mit variablen Charakter
- 26. str_replace() mit assoziativem Array
- 27. str_replace() macht falscher Ersatz
- 28. Str_replace mit regex
- 29. Gegenüber von nl2br? Ist es str_replace?
- 30. PHP "str_replace" funktioniert in einigen Fällen nicht richtig?
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. –
Ich bearbeite meine Antwort mit ein paar weiteren Informationen, die dir vielleicht dabei helfen könnten :-) Viel Spaß! –