Ik heb vorig jaar ooit een berichten script gemaakt en die ga ik nu weer gebruiken voor een website. Ik ben er smilies aan het inzetten en een scheldwoorden filter. Die scheldwoorden filter gaat via een str_replace. Als bijv. klootzak ingevuld wordt, dan komt er plaatje voor in de plaats. Echter als er Klootzak (met hoofdletter) wordt ingevoerd, dan is het slechte woord wel zichtbaar. Ik moet dan voor elk woord appart (klootzak, Klootzak, KLOOTZAK, KlOoTZaK enz...) een replace neerzetten met een apart plaatje. Dat wil ik niet want dan heb ik straks 6 regels met hetzelfde woord. Weet iemand een idee zodat php het niet uitmaakt of er kleine of grote letters staan?
http://nl.php.net/manual/en/function.str-ireplace.php
Even voor de duidelijkheid dit is de caseinsenstive versie van str_replace
Even voor de duidelijkheid dit is de caseinsenstive versie van str_replace
[ Voor 57% gewijzigd door Eskimootje op 11-09-2003 16:44 . Reden: vorige was regex :X ]
Heeft PHP een functie waarmee je een string volledig in hoofdletters kan zetten?
Zoja dan kan je dit doen:
pseudo-code
Zoja dan kan je dit doen:
code:
1
| ToUpper(string) == "KLOOTZAK" |
pseudo-code
https://fgheysels.github.io/
Als ik met deze code de naam klootzak een variable geef voor alle scheldwoorden kunnen de woorden dan automatisch in hoofdletters gezet worden en dan door de replace string een plaatje?whoami schreef op 11 September 2003 @ 16:41:
Heeft PHP een functie waarmee je een string volledig in hoofdletters kan zetten?
Zoja dan kan je dit doen:
code:
1 ToUpper(string) == "KLOOTZAK"
pseudo-code
code:
1
| $variabel = str_ireplace("klootzak","[img]'pic.jpg'[/img]",$variabel); |
zoals Eskimootje ook al opmerkte
...
[ Voor 27% gewijzigd door Eskimootje op 11-09-2003 17:29 ]
Okee... dit lukt perfect. Nu heb ik een bestand aangemaakt scheldwoorden.dat deze kan ik netjes aanroepen maar dan doet hij het niet meer, waarschijnlijk omdat er meer dan 1 woord in staatIceM schreef op 11 september 2003 @ 17:27:
code:
1$variabel = str_ireplace("klootzak","[img]'pic.jpg'[/img]",$variabel);
zoals Eskimootje ook al opmerkte
PHP:
1
2
3
4
| <?php $scheldwoorden = file("scheldwoorden.dat"); variabel = str_ireplace($scheldwoorden,"[img]'pic.jpg'[/img]",$variabel); } |
Dit zal het niet helemaal doen trouwens omdat de regeleinden worden meegenomen bij file(); maar dat mag je zelf uitzoeken
[ Voor 54% gewijzigd door Eskimootje op 11-09-2003 17:43 ]
Ah. die enters bedoel je. Daar weet ik wel een oplossing voorEskimootje schreef op 11 September 2003 @ 17:36:
PHP:
1 2 3 4 <?php $scheldwoorden = file("scheldwoorden.dat"); variabel = str_ireplace($scheldwoorden,"[img]'pic.jpg'[/img]",$variabel); }
Dit zal het niet helemaal doen trouwens omdat de regeleinden worden meegenomen bij file(); maar dat mag je zelf uitzoeken
Mensen ik snap het nog niet helemaal. Ik gebruik nu deze code:
Nu zorgt $str = $codes; er toch voor dat alles wat in de $codes variable staat omgezet wordt naar kleine letters? Of doe ik iets fout nu. Iig zie ik geen verschil. Als voorbeeld geef op het einde van de regel ==> :k . Deze smilie werkt goed. Echter als ik met de hoofdletter K ga werken zie ik :K ipv een smilie. Ik zou zo toch denken dat het goed moet zijn en dat ik smilie-codes in kleine letters krijg
PHP:
1
2
3
4
5
6
7
8
9
10
11
| $str = strtolower($str); $codes = array(0=>':D',1=>':-D',2=>':d',3=>':-d',4=>':S',5=>':-S',6=>':s',7=>':-s',8=>':O',9=>':-O',10=>':o',11=>':-o',12=>":'(",13=>":'-(",14=>'(h)',15=>'(H)',16=>':(',17=>':-(',18=>':)',19=>':-)',20=>'(i)',21=>'(I)',22=>';)',23=>';-)',24=>':P',25=>':-P',26=>':p',27=>':-p',28=>':|(',29=>'_^_',30=>':k'); $str = $codes; $smilies = array(0=>'icon_mrgreen.gif',1=>'icon_mrgreen.gif',2=>'icon_mrgreen.gif',3=>'icon_mrgreen.gif',4=>'icon_confused.gif',5=>'icon_confused.gif',6=>'icon_confused.gif',7=>'icon_confused.gif',8=>'icon_surprised.gif',9=>'icon_surprised.gif',10=>'icon_surprised.gif',11=>'icon_surprised.gif',12=>'icon_cry.gif',13=>'icon_cry.gif',14=>'icon_cool.gif',15=>'icon_cool.gif',16=>'icon_frown.gif',17=>'icon_frown.gif',18=>'icon_smile.gif',19=>'icon_smile.gif',20=>'icon_idea.gif',21=>'icon_idea.gif',22=>'icon_wink.gif',23=>'icon_wink.gif',24=>'icon_razz.gif',25=>'icon_razz.gif',26=>'icon_razz.gif',27=>'icon_razz.gif',28=>'icon_stom.gif',29=>'icon_hulde.gif',30=>'icon_hulde.gif'); while (list($key) = each($codes)) { $smilies[$key] = $icoontjespad.$smilies[$key] ; $gegevens['bericht'] = str_replace($str[$key], "[img]\"$smilies[$key]\"[/img] ", $gegevens['bericht']); } echo "<B>$gegevens[naam]</B>: $gegevens[bericht] <b>[]</b> "; |
Nu zorgt $str = $codes; er toch voor dat alles wat in de $codes variable staat omgezet wordt naar kleine letters? Of doe ik iets fout nu. Iig zie ik geen verschil. Als voorbeeld geef op het einde van de regel ==> :k . Deze smilie werkt goed. Echter als ik met de hoofdletter K ga werken zie ik :K ipv een smilie. Ik zou zo toch denken dat het goed moet zijn en dat ik smilie-codes in kleine letters krijg
hiervoor kan je beter met regular expressions werken, zoals bv ereg_replace en eregi_replace. Str_replace is binary safe en dus hoofdlettergevoelig.
De volgende regel is ook overbodig:
Je kan beter de pad var direct in de url plaatsen als je aan het replacen bent.
Nee dus.
De volgende regel is ook overbodig:
PHP:
1
| $smilies[$key] = $icoontjespad.$smilies[$key] ; |
Je kan beter de pad var direct in de url plaatsen als je aan het replacen bent.
Ehum....Nu zorgt $str = $codes; er toch voor dat alles wat in de $codes variable staat omgezet wordt naar kleine letters?
Nee dus.
To study and not think is a waste. To think and not study is dangerous.
str_ireplace() is dus pas beschikbaar in PHP 5, dus dat zal nu niet gaan werken. Regexen zijn hiervoor best geschikt, maar je kunt beter de preg_*() functies gebruiken dan de ereg_*() functies, omdat die een stuk sneller zijn.
Rustacean
heej maar dit probleem had ik laatst ook, stel ik wil een str_replace($haystack, $needle) op een string doen, maar ik meerdere needles! moet ik dan 3x str_replace doen? of kan ik bijv. ook een array maken met al m'n needles?
Het lijkt me niet nodig om dit topic om hoog te schoppen met deze manual vraag. Lees voor de gein eens wat er bij www.php.net staat bij str_replace()....
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Pagina: 1
Dit topic is gesloten.
![]()