AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PHP: preg_replace

Ein Thema von Die Muhkuh · begonnen am 22. Mai 2011 · letzter Beitrag vom 22. Mai 2011
Antwort Antwort
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

PHP: preg_replace

  Alt 22. Mai 2011, 20:12
Hi,

ich hab gerade ein Schlauch auf der Leitung.

Ich möchte in einem HTML-Text alle <img src="bla.jpg" /> umschreiben in <img src="../bla.jpg" />.

Folgender Versuch:

Code:
$matches = array();
$cnt = preg_match_all('#<img(.*?)src="(.*?)"(.*?)/>#ms', $text, $matches);

$replacements = array();
$patters = array();

for ($i = 0; $i < $cnt; $i++)
{
    $patters[] = '#<img(.*?)src="(.*?)"(.*?)/>#ms';
    $replacements[] = '<img ' . $matches[1][$i] . ' src="../' . $matches[2][$i] . '" ' . $matches[3][$i] . ' />';
}

$text = preg_replace($patters, $replacements, $text);
Geht schief, klar. Es fehlt quasi beim replace irgendeine Art "offset". Ich glaube, ich mach es mir gerade schwerer, als ich es eigentlich machen müsste.

Jemand fix eine Idee?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: PHP: preg_replace

  Alt 22. Mai 2011, 21:07
Kannst du mal kurz beschreiben, was passiert? Mir fällt es etwas schwer, das so nachzuvollziehen.

Ansonsten:
  • Wozu ist $patters[] = '#<img(.*?)src="(.*?)"(.*?)/>#ms'; ? Sehe nicht, dass das irgendwo noch mal verwendet würde.
  • Müsste es nicht heißen $matches[$i][1] statt $matches[1][$i] ? (bin mir da selbst gerade nicht sicher)

[edit]
Ach jetzt kapier ich, was du mit deinem Code zu erreichen versuchst. Du kannst dir das preg_match_all einfach sparen. preg_replace ersetzt per default alle Vorkommnisse des gesuchten Musters.
[/edit]

Geändert von Namenloser (22. Mai 2011 um 21:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: PHP: preg_replace

  Alt 22. Mai 2011, 21:08
Hallo Manu,

keine Ahnung, ob ich dich richtig verstanden habe:

$text = preg_replace('#<img src="([a-zA-Z0-9._-]+)" />#', '<img src="../$1" />', $text); Also ohne Schleife, nur der eine Aufruf.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

AW: PHP: preg_replace

  Alt 22. Mai 2011, 21:14
Hallo Manu,

keine Ahnung, ob ich dich richtig verstanden habe:

$text = preg_replace('#<img src="([a-zA-Z0-9._-]+)" />#', '<img src="../$1" />', $text); Also ohne Schleife, nur der eine Aufruf.
Passt. Ich Dödel hatte vergessen, dass man ja per Backreferences darauf zugreifen kann (was ich letztendlich mit meiner Schleife erreichen wollte)
  Mit Zitat antworten Zitat
ulilüding

Registriert seit: 23. Okt 2010
Ort: Berlin
33 Beiträge
 
Delphi 5 Professional
 
#5

AW: PHP: preg_replace

  Alt 22. Mai 2011, 21:21
Hi Muhkuh,
also, ich würde mir die arrays patters und replacements einfach mal mit echo(array-element) anzeigen lassen. Dann siehst Du ja, was da was in realiter ersetzt. Und ob die arrays $cnt Einträge haben. usw
LG Uli
eben der mit space
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

AW: PHP: preg_replace

  Alt 22. Mai 2011, 23:26
Hi Muhkuh,
also, ich würde mir die arrays patters und replacements einfach mal mit echo(array-element) anzeigen lassen. Dann siehst Du ja, was da was in realiter ersetzt. Und ob die arrays $cnt Einträge haben. usw
LG Uli
Wenn dann doch bitte eher print_r oder var_dump, da druckt es das ganze Array und nicht nur ein Element.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz