preg_replace
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgeben
ausgelesen inder
bestimmtes bild
bild
code
datei
definieren
ersetzen
erstellen
hilfe
http
match
nehmen
pfad
raten
speichern
string
teddy
url
zeile
-
Hallo Leute,
ich will eine Zeichenkette, inder "thubnail" drinne vorkommt durch "<img src=""> ersetzen und habe dazu folgenden Code:
$content = preg_replace("/thubnail=['\"]((?!(http:\/\/|https:\/\/|\/))[^'\"]+?)['\"][^>]*?/is", "/<img([^>]*?)src=['\"]((?!(http:\/\/|https:\/\/|\/))[^'\"]+?)['\"]([^>]*?)>/", $content);
Allerdings bin ich das, was man so liebevoll einen Laie nennt in dem Gebiet und weiß nicht, warum es nicht funktioniert. Der String wird nicht ersetzt.
PS: Das, was aussieht wie W und V sind \ und / -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Meinst du das so:
<?php $content = 'bla bla thubnail="xyz" "abc" bla'; $pattern = '/thubnail=[\'"]([^\'"]*)[\'"]/is'; $replace = '<img src="\\1" />'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
Beitrag zuletzt geändert: 9.2.2012 16:04:18 von hackyourlife -
hackyourlife schrieb:
Meinst du das so:<?php $content = 'bla bla thubnail="xyz" bla'; $pattern = '/thubnail=[\'"](.*)[\'"][^>]*?/is'; $replace = '<img src="\\1" />'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
Guter Ansatz, aber nein ;)
content wird für jede Seite individuell ausgelesen, demnach will ich kein echo ausgeben.. Das was vor thubnail steht (beginnend mit highslide) muss auch ersetzt werden und es muss ein absoluter Pfad entstehen...
//EDIT: Sorry, ich sehe jetzt erst, das der Code oben noch der alte aus dem Zwischenspeicher ist...
So sollte es aussehen:
$content = preg_replace("/<a[^>]*?class=\"highslide\"[^<]*?\>([^<]*?)<img[^>]*?src=['\"]((?!(http:\/\/|https:\/\/|\/))[^'\"]+?)['\"]([^>]*?)\/>[^>]*?<\/a>/i", "<img[^>]*?src=['\"]((?!(http:\/\/|https:\/\/|\/))[^'\"]+?)['\"][^>]*?\>", $content);
Beitrag zuletzt geändert: 9.2.2012 16:09:08 von kill-a-teddy -
Ist es so besser:
<?php $pattern = '#<a[^>]*?class="highslide"[^<]*?\>([^<]*?)<img[^>]*?src=[\'"](?:http://|https://|/)([^\'"]+?)[\'"]([^>]*?)>(.*?)</a>#is'; //((?!(http://|https://|/))[^\'"]+?)[\'"]([^>]*?)\/>[^>]*?<\/a>#isU'; $replace = '<a class="highslide">\\1<img src="/\\2" />\\4</a>'; $content = 'bla bla <a class="highslide"><img src="http://abc/xyz" /></a> <a shit class="highslide" bla>def<img ghi src="http://abc/xyz" jkl /></a> "abc" bla'; $content = preg_replace($pattern, $replace, $content); ?>
-
hackyourlife schrieb:
Ist es so besser:<?php $pattern = '#<a[^>]*?class="highslide"[^<]*?\>([^<]*?)<img[^>]*?src=[\'"](?:http://|https://|/)([^\'"]+?)[\'"]([^>]*?)>(.*?)</a>#is'; //((?!(http://|https://|/))[^\'"]+?)[\'"]([^>]*?)\/>[^>]*?<\/a>#isU'; $replace = '<a class="highslide">\\1<img src="/\\2" />\\4</a>'; $content = 'bla bla <a class="highslide"><img src="http://abc/xyz" /></a> <a shit class="highslide" bla>def<img ghi src="http://abc/xyz" jkl /></a> "abc" bla'; $content = preg_replace($pattern, $replace, $content); ?>
Auch nicht sorry.. Das Bilder unterstützt werden weiß ich aber definitiv, denn das hier funktioniert:
$content = preg_replace("/<img([^>]*?)src=['\"]((?!(http:\/\/|https:\/\/|\/))[^'\"]+?)['\"]([^>]*?)>/i", "<img$1src=\"".site_url()."/$2\"$4>", $content);
Damit wird der absolute Pfad eingeschrieben und später wird dann auch ein Bild angezeigt, sofern es keinen "highslide" hat...
Trotzdem Danke für deine Mühen, ich glaub des klappt nie.. -
kill-a-teddy schrieb:
Formulier mal ganz genau was du eigentlich willst.
Auch nicht sorry..
Gib mir ein Codebeispiel vor dem Ersetzen, und das, was nach dem Ersetzen herauskommen sollte.
Ansonsten wird das nur ein Ratespiel... -
hackyourlife schrieb:
kill-a-teddy schrieb:
Formulier mal ganz genau was du eigentlich willst.
Auch nicht sorry..
Gib mir ein Codebeispiel vor dem Ersetzen, und das, was nach dem Ersetzen herauskommen sollte.
Ansonsten wird das nur ein Ratespiel...
Okay ich will lediglich, dass mein Code:
<a href="http://www.killadesign.de/images/Tut-Pic-1.png" class="highslide" onclick="return hs.expand(this, {captionId: 'caption-for-P201'})"> <img src="bild.png" alt="" border="0" id="P201" title="" /></a>
um den Link verkürzt wird und am Ende so aussieht:
<img src="bild.png">
Also der link soll weg und "alt" und "border, id und title" -
Du meist es also so:
Das erkennt auch ob " oder ' bei src verwendet wird...<?php $pattern = '|<a[^>]+>.*<img .*src=([\'"])(.*)\1[^>]*>.*</a>|isU'; $replace = '<img src=\1\2\1 />'; $content = '<a href="http://www.killadesign.de/images/Tut-Pic-1.png" class="highslide" onclick="return hs.expand(this, {captionId: \'caption-for-P201\'})"> <img src="bild.png" alt="" border="0" id="P201" title="" /></a>'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
isU als Modifikatoren:
i = Groß/Kleinschreibung ignorieren
s = . darf darf auch ein Zeilenumbruch sein
U = standardmäßig nicht gierig. Das bedeutet: pcre versucht den kürzesten passenden String zu finden (normalerweise wird der längste gefunden!). -
hackyourlife schrieb:
Du meist es also so:<?php $pattern = '|<a[^>]+>.*<img .*src=([\'"])(.*)\1[^>]*>.*</a>|isU'; $replace = '<img src=\1\2\1 />'; $content = '<a href="http://www.killadesign.de/images/Tut-Pic-1.png" class="highslide" onclick="return hs.expand(this, {captionId: \'caption-for-P201\'})"> <img src="bild.png" alt="" border="0" id="P201" title="" /></a>'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
Verstanden hast du es, allerdings hab ich diese Variante vorher auch gehabt und wieder verworfen, da mir auffiel, dass ich dann nur ein bestimmtes Bild nehmen kann, da ich entweder eine Variable in der Variable content definieren müsste oder für jedes Bild eine Zeile code erstellen müsste...
Dann versuchte ich es ohne
$content = '<a href="http://www.killadesign.de/images/Tut-Pic-1.png" class="highslide" onclick="return hs.expand(this, {captionId: \'caption-for-P201\'})"> <img src="bild.png" alt="" border="0" id="P201" title="" /></a>';
Und es funktionierte wieder nicht... Mit hab ich wenigstens noch die Fehlermeldung bekommen, dass er nicht auf das Bild drauf zugreifen kann (existierte nicht war also ok)
Fazit: Egal was ich versuche es scheint aussichtslos... Ich habe keine Ahnung, warum das bei dem Teil so schwierig ist, ich hab bestimmt 50 mal preg_replace in meinem Code und ALLE anderen preg's funktionieren einwandfrei... -
kill-a-teddy schrieb:
Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?
Verstanden hast du es, allerdings hab ich diese Variante vorher auch gehabt und wieder verworfen, da mir auffiel, dass ich dann nur ein bestimmtes Bild nehmen kann, da ich entweder eine Variable in der Variable content definieren müsste oder für jedes Bild eine Zeile code erstellen müsste... -
hackyourlife schrieb:
kill-a-teddy schrieb:
Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?
Verstanden hast du es, allerdings hab ich diese Variante vorher auch gehabt und wieder verworfen, da mir auffiel, dass ich dann nur ein bestimmtes Bild nehmen kann, da ich entweder eine Variable in der Variable content definieren müsste oder für jedes Bild eine Zeile code erstellen müsste...
Die Strings werden von den Seiten ausgelesen, inder ich einen Link einfüge... Mithilfe dessen:
$path = ''; if (!defined('WP_LOAD_PATH')) { $classic_root = dirname(dirname(dirname(dirname(__FILE__)))).'/'; if (file_exists($classic_root.'wp-load.php') ) { define('WP_LOAD_PATH', $classic_root); } else { if (file_exists($path.'wp-load.php')) { define('WP_LOAD_PATH', $path); } else { exit(__("Konnte wp-load.php nicht finden", "wp_sh")); } } }
Es benutzt WordPress als Hilfe den Pfad auszulesen, von der aus die Klasse aufgerufen wurde.
Hier ist mein Beitrag, mit dem ich das ganze Teste
und hier wird das ganze in eine PDF gedruckt
Beitrag zuletzt geändert: 9.2.2012 20:03:31 von kill-a-teddy -
kill-a-teddy schrieb:
Wenn du es irgendwie schaffst die Datei in eine Variable zu lesen (also z.B.:
Die Strings werden von den Seiten ausgelesen, inder ich einen Link einfüge... Mithilfe dessen:
...
Es benutzt WordPress als Hilfe den Pfad auszulesen, von der aus die Klasse aufgerufen wurde.
) kannst du das preg_replace anwenden. Ansonsten wird es umständlich...$content = file_get_contents($path);
-
hackyourlife schrieb:
kill-a-teddy schrieb:
Wenn du es irgendwie schaffst die Datei in eine Variable zu lesen (also z.B.:
Die Strings werden von den Seiten ausgelesen, inder ich einen Link einfüge... Mithilfe dessen:
...
Es benutzt WordPress als Hilfe den Pfad auszulesen, von der aus die Klasse aufgerufen wurde.
) kannst du das preg_replace anwenden. Ansonsten wird es umständlich...$content = file_get_contents($path);
Hmm... mir fällt nix ein -
hackyourlife schrieb:
Damit mein ich wo die Links mit den Bildern gespeichert sind (HTML-Code).
Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?
kill-a-teddy schrieb:
Dir wird solange nichts einfallen können, wie du nicht weißt, wo die Links mit den Bildern gespeichert sind (in welcher Datei) oder zumindest wo du die Links mit Bildern herbekommst. Leider verwende ich WordPress nicht, deshalb kann ich dir da jetzt nicht weiterhelfen.
Hmm... mir fällt nix ein
Das Einzige was mir sonst noch einfällt, aber EXTREM hässlich ist, ist, die Seite mit cURL herunterzuladen und in einer Variable zu speichern. Diese Variable kann dann an preg_replace verfüttert werden.
ABER: dabei wird auch der Rest der Seite (html-Kopf, Layout, ...) beibehalten. Du möchtest aber warscheinlich nur den Beitrag mit dem Script ausbessern lassen....
Beitrag zuletzt geändert: 9.2.2012 21:13:20 von hackyourlife -
hackyourlife schrieb:
Das Einzige was mir sonst noch einfällt, aber EXTREM hässlich ist, ist, die Seite mit cURL herunterzuladen und in einer Variable zu speichern. Diese Variable kann dann an preg_replace verfüttert werden.
ABER: dabei wird auch der Rest der Seite (html-Kopf, Layout, ...) beibehalten. Du möchtest aber warscheinlich nur den Beitrag mit dem Script ausbessern lassen....
Das wird in der "wp-load.php" definiert...
Die Variable $content ist darin global definiert, und ist IMMER der Inhalt der Seite... Demnach überlege ich gerade etwas... Wenn ich den Link wieder ändere, in den oben also, dass das mit <highslide> anfängt, dann könnte ich doch
preg_match_all ('!<highslide([^>]*)[ ]*[/]*>!i', $content, $matches);
Er sucht also nach einer Übereinstimmung mit den Strings die "<highslide>" beinhalten und gibt es als array $matches aus wenn ich nicht zu dämlich dafür bin...
Anschließend könnte ich doch als pattern das erzeugte Array benutzen und durch den <img> Tag ersetzen und als $content wieder ausgeben?
Klingt das irgendwie logisch? -
kill-a-teddy schrieb:
Das wird in der "wp-load.php" definiert...
Die Variable $content ist darin global definiert, und ist IMMER der Inhalt der Seite... Demnach überlege ich gerade etwas... Wenn ich den Link wieder ändere, in den oben also, dass das mit <highslide> anfängt, dann könnte ich doch ...hackyourlife schrieb:
Ansonsten muss ich raten, da ich mit <highslide> allein nicht gerade viel anfangen kann.
Gib mir ein Codebeispiel vor dem Ersetzen, und das, was nach dem Ersetzen herauskommen sollte.
kill-a-teddy schrieb:
Und warum nicht gleich preg_replace verwenden? Das macht das Gleiche in einem einzigen Befehl.
Er sucht also nach einer Übereinstimmung mit den Strings die "<highslide>" beinhalten und gibt es als array $matches aus wenn ich nicht zu dämlich dafür bin...
Anschließend könnte ich doch als pattern das erzeugte Array benutzen und durch den <img> Tag ersetzen und als $content wieder ausgeben? -
hackyourlife schrieb:
Gib mir ein Codebeispiel vor dem Ersetzen, und das, was nach dem Ersetzen herauskommen sollte.
Ansonsten muss ich raten, da ich mit <highslide> allein nicht gerade viel anfangen kann.
Kommst du dir nicht inzwischen ein wenig dämlich vor mir trottel zu helfen? ^^ Du bist aber sehr ausdauernd :D
Also schön:
Das ist der Code:
<highslide image="http://www.killadesign.de/images/Tut-Pic.jpg" thumbnail="http://www.killadesign.de/images/Tut-Pic.jpg" altdesc="" captiontext="null" show_caption="y" />
Und er soll ersetzt werden durch:
<img src="(Die Quelle ist immer Thumbnail)">
Mehr soll da gar nicht passieren ^^ -
kill-a-teddy schrieb:
Du bist aber sehr ausdauernd :D
Also gut:
Die Zuweisung mit<?php $pattern = '|<highslide .*thumbnail=([\'"])(.*)\1[^>]*>|isU'; $replace = '<img src=\1\2\1 />'; $content = 'Bla<highslide image="http://www.killadesign.de/images/Tut-Pic.jpg" thumbnail="http://www.killadesign.de/images/Tut-Pic.jpg" altdesc="" captiontext="null" show_caption="y" />Bla'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
ist nur ein Testbeispiel, genauso wie das$content = '...';
nur zu Testzwecken existiert.echo($content);
-
hackyourlife schrieb:
kill-a-teddy schrieb:
Du bist aber sehr ausdauernd :D
Also gut:
Die Zuweisung mit<?php $pattern = '|<highslide .*thumbnail=([\'"])(.*)\1[^>]*>|isU'; $replace = '<img src=\1\2\1 />'; $content = 'Bla<highslide image="http://www.killadesign.de/images/Tut-Pic.jpg" thumbnail="http://www.killadesign.de/images/Tut-Pic.jpg" altdesc="" captiontext="null" show_caption="y" />Bla'; $content = preg_replace($pattern, $replace, $content); echo($content); ?>
ist nur ein Testbeispiel, genauso wie das$content = '...';
nur zu Testzwecken existiert.echo($content);
Das ist schon perfekt. :)
Eigenartig ist gerade allerdings, dass es ohne das echo nicht funktioniert... Mit wird aber alles ausgelesen, wenn auch unformatiert ^^
Hab mir jetzt mal eine htaccess hoch geladen, um die Fehler auszubessern... Bis dato gibt es sonst aber keine Beschwerden, lieben Dank!
Beitrag zuletzt geändert: 10.2.2012 11:12:59 von kill-a-teddy -
kill-a-teddy schrieb:
Was passiert also?
Eigenartig ist gerade allerdings, dass es ohne das echo nicht funktioniert... Mit wird aber alles ausgelesen, wenn auch unformatiert ^^
Wo hast du das echo() hingeschrieben? Wo führst du das preg_replace aus? Am Anfang der Seite? Bevor der Beitrag ausgegeben wird? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage