WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PHP: gleichwertige alternative zu str_ireplace (http://www.wcm.at/forum/showthread.php?t=137499)

Potassium 21.06.2004 23:32

PHP: gleichwertige alternative zu str_ireplace
 
sers
was gibts es für eine ähnliche und gleichwertige funktion bei PHP wie str_ireplace (nicht str_replace).
(das i bedeutet case insensitive).

_m3 22.06.2004 06:32

http://at.php.net/manual/de/function.preg-replace.php
?

Potassium 22.06.2004 07:48

*yuk*
argl ich mag ereg_* und preg_* ned weil man da immer mit den ^ und \ etc herumschei*en muss :mad:
und ich hab bis jetzt noch nix gefunden wie das ordentlich funktioneren soll :heul:

_m3 22.06.2004 09:44

Und warum magst str_ireplace ned?

Potassium 22.06.2004 12:12

Zitat:

Original geschrieben von _m3
Und warum magst str_ireplace ned?
ich mags eh aber das gibts erst ab PHP 5 :(
und weder auf meinem lokalen server noch auf dem space läuft schon die 5er version....

snowman 22.06.2004 12:58

in 2 Schritten?

strtolower oder mb_strtolower und dann str_replace

gruss,
snowman

Potassium 22.06.2004 13:27

Zitat:

Original geschrieben von snowman
in 2 Schritten?

strtolower oder mb_strtolower und dann str_replace

gruss,
snowman

genau das will ich verhinder nämlich das mein text dann ganz lowercase is. :(
warum das ganze ich brauch einen bbcode=>html und wieder back konverter. in allen gängigen php-sw's wird es aber mit preg_replace oder ereg_replace gemacht :( so.
mein code:
PHP-Code:

$text str_replace("http://","",$text);
    if(
substr_count(strtolower($text),"[url]") >= 1) {

        
$url_1 substr(strtolower($text),strpos(strtolower($text),"[url]")+5);    
        
$url substr(strtolower($url_1),0,strpos(strtolower($url_1),"[/url]"));
        
$text str_replace("[url]","<a href='http://",strtolower($text));
        
$text str_replace("[/url]","'>".$url."</a>",strtolower($text));
    }
    if(
substr_count(strtolower($text),"[url=") >=1){
        
$text str_replace("[/url]","</a>",$text);
        
$url_1 substr(strtolower($text),strpos(strtolower($text),"[url=")+5);
        
$url substr(strtolower($url_1),0,strpos(strtolower($url_1),"]"));
        
$text str_replace("[url=","<a href=\"http://",strtolower($text));
#        $text = preg_replace("^[\]]+","\">",strtolower($text),"",strtolower($text),1);
        
$text str_replace(substr(strtolower($text), strpos(strtolower($text),"]"), 1),"\">",strtolower($text));        
        


ich weiß es is eher :rolleyes:
hilfe wird gerne entgegen genommen.
ajo ich muss das strtolower($text) wegbekommen weil ich sonst eben einen lowercase string zurückbekomm was ich aber ned will

_m3 22.06.2004 14:14

:eek: WTF?
Was macht der code?

Potassium 22.06.2004 14:23

er wandelt [#url=www.wcm.at]wcm[/#url] in wcm um.
theoretisch :rolleyes:
(ohne die #)

_m3 22.06.2004 14:33

In Perl (die regex sollte in PHP auch funktionieren):
Code:

$x = '[url=www.wcm.at]wcm[/url]';
$x =~ s/\[url=(.*?)\](.*?)\[\/url\]/<a href=\"$1\">$2<\/a>/i;
print "$x \n";


Potassium 22.06.2004 14:54

Zitat:

Original geschrieben von _m3
In Perl (die regex sollte in PHP auch funktionieren):
Code:

$x = '[url=www.wcm.at]wcm[/url]';
$x =~ s/\[url=(.*?)\](.*?)\[\/url\]/<a href=\"$1\">$2<\/a>/i;
print "$x \n";


und was bedeutet das?
da kenn ich mich ja hint und vorn ned aus :eek: :(

_m3 22.06.2004 15:11

Code:

Ersetze \[url=(.*?)\](.*?)\[\/url\] durch <a href=\"$1\">$2<\/a>

Potassium 22.06.2004 16:03

Zitat:

Original geschrieben von _m3
Code:

Ersetze \[url=(.*?)\](.*?)\[\/url\] durch <a href=\"$1\">$2<\/a>

:rolleyes:
was soll das (.*?)
und was is $1 und $2?

_m3 22.06.2004 16:21

Wenn Du in einer RegEx was mit runden Klammern klammerst, kannst Du im Ersetzen-Teil bzw. nach der Suche auf das, was in den Klammern steht, über $ZAHL zugreifen, wobei für den Wert von ZAHL die "(" von links nach rechts gezählt werden.

.* markiert alles ;)
und mit dem "?" sag man ihm, dass er mit dem .* aufhören soll, wenn er auf das erste [/url] stößt. Ohne dem "?" würde er bis zum letzten [/url] weiterlaufen.

Potassium 22.06.2004 18:35

:idee:
danke. :)
nur ein prob bleibt wenn ich einen text hab zb:
Code:

[#url]www.wcm.at[/url]
[#url=www.wcm.at]die beste computerzeitung &ouml;sterreichs[/url]

dann wandelt er nur eine url in ne url die andre bleibt im code stehen ( je nachdem welcher pref-befehl zuerst steht im script)
PHP-Code:

$text preg_replace("/\[url\](.*?)\[\/url\]/i","[url='http://$1']$1[/url]"$test);
$text =  preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/i","[url='http://$1']$2[/url]"$test); 


_m3 22.06.2004 18:54

in Perl setzt man dazu hinter der Option "i" auch noch das "g", dann macht er alle in dem String.
Wie das bei PHP geht, musst Du im Manual nachsehen.

käptn 22.06.2004 18:57

Eckige Klammern müssen maskiert werden, da sie normalerweise eine Zeichklassendefinition einleiten.

\[url\]

~

_m3 22.06.2004 19:07

Da hat der potassium wieder schlampert von mir abgeschrieben ;)

Potassium 22.06.2004 19:42

Zitat:

Original geschrieben von käptn
Eckige Klammern müssen maskiert werden, da sie normalerweise eine Zeichklassendefinition einleiten.

\[url\]

~

die sind maskiert aber die [#php] funktion vom board lässst diese striche weg :motz:
@_m3: :p:D

Potassium 22.06.2004 22:41

habs nun so:
Code:

if(substr_count(strtolower($text),"[url]") >= 1) {
               
                $text = preg_replace("/\[url\](.*?)\[\/url\]/i","$1", $text);
               
        }
        if(substr_count(strtolower($text),"WCM

findet wer den fehler? :D

argl die code funktion vom forum passt auch ned :mad:

ajo als eingabe fürs 2e bekommt er:
WCM

_m3 23.06.2004 08:35

[code]
$y = 'WCM';
$y =~ s/\<a href=\"(.*?)\"\>(.*?)\<\/a\>/\[url=\"$1\"\]$2\[\/url\]/i;
print "$y\n";
[/code]

käptn 23.06.2004 10:41

Also, so wie ich das sehe wäre BBCodeParser genau das Richtige für unseren alkalischen Freund :)

Und ich muss wohl noch irgendwo eine aktuellere version dieser RegEx herumliegen haben - mal sehen...

~

käptn 23.06.2004 10:49

Hab's schon - sollte aber wahrscheinlich mal wieder genauer untersucht werden - ich weiß nämlich nicht ob sie noch das tut was sie soll:

{((?<!src="|href="|url="|src=|href=|url=)http:\/\/|ftp:\/\/|news:\/\/|((?<!http:\/\/)www\.))([\w\-.]+[^,.;:?!/<\s])([/\w.#?&=%+@~*_\-,;:]*?)(?=[,.;:?!<]*([^/\w.#?&=%+@~*_\-,;:]|$))}i

~

Potassium 23.06.2004 18:29

Zitat:

Original geschrieben von _m3
[code]
$y = 'WCM';
$y =~ s/\<a href=\"(.*?)\"\>(.*?)\<\/a\>/\[url=\"$1\"\]$2\[\/url\]/i;
print "$y\n";
[/code]

funktioniert auch ned :heul:
aber warum escapest im replace-teil? und warum die " ?


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag