kostenloser Webspace werbefrei: lima-city


preg_replace

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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 /
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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
  4. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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); 
    ?>
  6. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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..
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Auch nicht sorry..
    Formulier mal ganz genau was du eigentlich willst.
    Gib mir ein Codebeispiel vor dem Ersetzen, und das, was nach dem Ersetzen herauskommen sollte.
    Ansonsten wird das nur ein Ratespiel...
  8. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    kill-a-teddy schrieb:
    Auch nicht sorry..
    Formulier mal ganz genau was du eigentlich willst.
    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"
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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);
    ?>
    Das erkennt auch ob " oder ' bei src verwendet wird...

    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!).
  10. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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...
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    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...
    Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?
  12. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    kill-a-teddy schrieb:
    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...
    Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?


    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
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    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.
    Wenn du es irgendwie schaffst die Datei in eine Variable zu lesen (also z.B.:
    $content = file_get_contents($path);
    ) kannst du das preg_replace anwenden. Ansonsten wird es umständlich...
  14. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    kill-a-teddy schrieb:
    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.
    Wenn du es irgendwie schaffst die Datei in eine Variable zu lesen (also z.B.:
    $content = file_get_contents($path);
    ) kannst du das preg_replace anwenden. Ansonsten wird es umständlich...


    Hmm... mir fällt nix ein
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    hackyourlife schrieb:
    Woher bekommst du denn die Strings mit den Bildern wo du ersetzen möchtest?
    Damit mein ich wo die Links mit den Bildern gespeichert sind (HTML-Code).

    kill-a-teddy schrieb:
    Hmm... mir fällt nix ein
    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.

    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
  16. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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?
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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:
    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.

    kill-a-teddy schrieb:
    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?
    Und warum nicht gleich preg_replace verwenden? Das macht das Gleiche in einem einzigen Befehl.
  18. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    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 ^^
  19. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Du bist aber sehr ausdauernd :D
    :biggrin:

    Also gut:
    <?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);
    ?>
    Die Zuweisung mit
    $content = '...';
    ist nur ein Testbeispiel, genauso wie das
    echo($content);
    nur zu Testzwecken existiert.
  20. Autor dieses Themas

    kill-a-teddy

    Kostenloser Webspace von kill-a-teddy

    kill-a-teddy hat kostenlosen Webspace.

    hackyourlife schrieb:
    kill-a-teddy schrieb:
    Du bist aber sehr ausdauernd :D
    :biggrin:

    Also gut:
    <?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);
    ?>
    Die Zuweisung mit
    $content = '...';
    ist nur ein Testbeispiel, genauso wie das
    echo($content);
    nur zu Testzwecken existiert.


    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
  21. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    kill-a-teddy schrieb:
    Eigenartig ist gerade allerdings, dass es ohne das echo nicht funktioniert... Mit wird aber alles ausgelesen, wenn auch unformatiert ^^
    Was passiert also?
    Wo hast du das echo() hingeschrieben? Wo führst du das preg_replace aus? Am Anfang der Seite? Bevor der Beitrag ausgegeben wird?
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!