Portal > Foren > PHP > PHP-Programmierung > preg_replace mit array[$1] als Ersatz?
Antwort
 
Themen-Optionen
Alt 23.09.2005, 20:22 Nach oben    #1
Benutzer
 
Benutzerbild von Magicman
 
Registriert seit: 23.09.2005
Beiträge: 35
Standard preg_replace mit array[$1] als Ersatz?

Hallo,

Ich bin neu hier im Forum, beschäftige mich aber schon mehrere Monate mit PHP, MySQL, Javascript und schon ziemlich lange mit HTML.

Habe gehört das ihr so die Elite sein sollt .

Folgendes Problem habe ich:

Es geht um preg_replace. ich möchte, dass ein BBCode Tag ( [URL#1] ) ersetzt wird.
Klingt nicht sehr kompliziert, aber hier erstmal der Code den ich bis jetzt haben.
PHP-Code:
$row[text] = preg_replace("!\[url#(.*)\]!isU","<img src=\"/files/$array1[$1]/$array2[$1]/\">",$row[text]); 
Dabei wird die nummer hinter dem "#" ausgelesen, und dann die Position in einem Array angeben.
Aber es funktioniert einfach nicht.

Danke für eure Hilfe im vorraus.
Magicman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 20:26 Nach oben    #2
Benutzer
 
Benutzerbild von Guradia
 
Registriert seit: 18.08.2005
Ort: Düsseldorf
Beiträge: 57
Standard

Bitte mal den kompletten Code (bzw. wichtiges drumrum).

Ich vermute mal das $array1 und $array2 irgendwelceh Arrays sind, die da rumliegen und aus denem der Wert auf ihrem Index # geholt werden soll.

Da bietet sich (meines Erachtens nach) ein preg_replace_callback() an ... denn innerhalb des replace hast du sonst keine Möglichkeit darauf zuzugreifen.
Guradia ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 20:34 Nach oben    #3
Benutzer
 
Benutzerbild von Magicman
 
Registriert seit: 23.09.2005
Beiträge: 35
Standard

ok,

PHP-Code:
$array1 explode ("?"$row[urlcodes]);

$array2 explode ("?"$row[urlnames]);

$row[text] = preg_replace("!\[url#(.*)\]!isU","<img src=\"/files/$array1[$1]/$array2[$1]/\">",$row[text]); 

$row[urlcodes/names] sind string wo verschiedene Werte mit "?" getrennt sind.
Also bei codes:
dummy?123456789?987654321?

und bei names:
dummy?google?ebay?
Magicman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 21:04 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 19.08.2005
Beiträge: 115
Standard

wie guradia schon sagte, hier bietet sich preg_replace_callback an.
Das problem ist, dass deine variablen eben variabel sind und ich keine möglichkeit kenne, an die replace funktion weitere parameter anzuhängen... da wirst du wohl global nutzen müssen, obwohl ich global eigentlich vermeide wos nur geht...

PHP-Code:
<?php 
function callback($treffer) {
        global 
$array1$array2;
        return 
"<img src=\"/files/".$array1[$treffer[1]]."/".$array2[$treffer[1]]."/\">";
}
?>
und dann der aufruf:
PHP-Code:
<?php
$row
[text] = preg_replace_callback("!\[url#(.*)\]!isU","callback",$row[text]);
?>
Buhmann ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.09.2005, 21:57 Nach oben    #5
Benutzer
 
Benutzerbild von Magicman
 
Registriert seit: 23.09.2005
Beiträge: 35
Standard

Vielen Dank,
das erzielt genau den Effekt, den ich haben will.

Danke nochmal an alle.
Magicman ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.09.2005, 22:02 Nach oben    #6
Benutzer
 
Registriert seit: 17.08.2005
Beiträge: 87
Standard

Geht bei Bedarf auch ohne callback/Funktion.
Mit der Option e wird der replace-Parameter als php-Code inerpretiert. Was dieser Code als Zeichenkette produziert wird als Ersatz benutzt. Einfach nur das Element des Feldes tut es also schon.
PHP-Code:
<?php
$pattern 
'!\[url#(\d+)\]!e';
$replace = array(
        
'1'=>'--loc1--',
        
'2'=>'--loc2--',
        
'3'=>'--loc3--'
    
);

$text '[url#2]klm[url#3]xyz[url#1]abc';
echo 
preg_replace($pattern'$replace[ \\1 ]'$text);

?>
VolkerK ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.09.2005, 20:16 Nach oben    #7
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von VolkerK
Geht bei Bedarf auch ohne callback/Funktion.
Und deutlich Fehleranfälliger.

http://www.php.de/forum/viewtopic.php?p=204124#204124
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.09.2005, 20:29 Nach oben    #8
Benutzer
 
Registriert seit: 17.08.2005
Beiträge: 87
Standard

Ja, möglich.
VolkerK ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.09.2005, 20:32 Nach oben    #9
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
PS:
Drittes Beispiel: Der Highlighting-Bug von PHPbb. preg_replace() mit Modifier e benutzt und nicht aufgepasst... wenn man mit eval nicht aufpasst, gibts halt Sicherheitslücken.
Zwar OT, aber das würde mich mal interessieren...
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ersatz für Thread.sleep(); Gottzilla Allgemeine Java-Programmierung 7 10.05.2005 09:52


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:12 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44