08. oktober 2005 - 00:27Der er
26 kommentarer og 1 løsning
strtolower and strtoupper
Hej prof's :)
Jeg har i øjeblikket et problem. Jeg har brug for at finde nogle bestemte ord i nogle indlæg, og så gøre dem til små.. Det vil sige alle de bestemte ord, som indeholder et stort bogstav, skal gøres små..
Men det virker desværre ikke :( Eksempelvis, hvis ordet skole er et som den leder efter, så vil det kun virke hvis der står SKOLE.. Altså SKOLE vil blive til skole, som det skal, men fx Skole eller skolE, vil ikke ændre sig.. Det vil forblive som det står, og det er et problem!
Hvordan kan jeg få den til at blive småt, ligemeget om hele ordet er med stort eller kun enkelte bogstaver i ordet.. ?
Det er en ord_censur, så henter nogle ord ud af en database.. Jeg ved ikke på forhånd hvilket ord som skal censures, om det er bandeord1 eller bandeord2.. Begge måske.. Ved heller ikke om der er skrevet bandeord1, BanDEorD1 eller BANDEORD1.. Det er nogle indlæg i en gæstebog..
Jeg kan ikke helt overskue, hvordan jeg kan få det til at virke sammen med preg_replace? Synes det virker lidt kompliceret.
Pidgeot: Hvis jeg gør sådan, så bliver hele beskeden med stort right? Det duer ikke rigtig, da det er indlæg i en gæstebog.. Det skal helst skrives, som brugeren skriver det..
Jamen når det bliver gjort på den der måde der, er det så ikke mere eller mindre det samme som at bruge str_replace? Altså, hvor jeg har badword først, derefter det som badword skal erstattes med (goodword)? For mig at se, er det det samme. Men det laver ikke problemet med store og små bogstaver?
Nej - det i der er sidst i den første parameter fortæller at den skal lave en case-insensitive sammenligning. Den du havde lavet kigger eksplicit kun efter ordet hvis det kun er med store bogstaver.
Du bør dog måske lige se efter om der er nogle lignende funktioner der ikke kræver regulære udtryk, da disse har tendens til at være "dyrere" end aldmindelig erstatning.
Jeg kan desværre ikke benytte $besked = str_ireplace ($ord_censur, strtolower($ord_censur), $besked); da jeg ikke koder i PHP5 endnu.. Eller bruger det på serveren..
Jeg har forsøgt mig med preg_replace. Og det virker sådan i princippet, men den laver også nogle fejl. Altså, for det første.. Nu censurerer den kun ord som indeholder 1 eller flere store bogstaver.. Men det er nok ikke så stort et problem, for kan altid have en str_replace ved siden af, som tager sig af de små bogstaver i ord.. Det undrede mig bare at den ikke klarer det hele preg_replace..?
Men det lidt større problem er at hvis der i beskeden for eksempel står:
Bandeord1 BANDEORD1 eller BAnDEord1 bandeorD1.. Så bliver det censureret til at være ******************* .. Det er jo ikke meningen. Ja den skal skrive stjerner i stedet for ordet, men problemet er den også tager og censurerer mellemrummet mellem de 2 ord.. Og det må den ikke!..
Hvad gør man mod dette? Kan ikke helt se hvorfor den gør det.
Jeg skal nok hjælpe, men jeg skal lige forstå din tabel først. Det er klart at du har flere censur-ord i din tabel. MEN ligger de som et ord pr. række i tabbellen, eller ligger de alle sammen i den samme række.
Nope, det ligger i flere rækker.. Det var det jeg mente med at de ikke lå i samme celle ;) Jeg kunne bare ikke huske hvad det hed, så kaldte det celle.. hehe.. Men ja, de ligger i flere forskellige rækker.. Derfor jeg bruger explode();
// Her erstatter vi fx å med å, da ellers at HTML måden at skrive å på, vil snyde "tælle delen", som afgør hvor mange stjerner der skal vises. // Hvis man ikke gjorde dette, så ville der hver gang man skrev å, komme 7 stjerner, fordi å er på 7 tegn. $htmlDansk = array("æ", "Æ", "ø", "Ø", "å", "Å"); $dansk = array("æ", "Æ", "ø", "Ø", "å", "Å"); $besked = str_replace($htmlDansk, $dansk, $besked);
// Her angiver vi hvilket tegn det censurede ord skal erstattes med. $censur_tegn = '*';
// Vi henter noget data fra tabellen "ord" i DB ud til en streng. $sql = "SELECT ord FROM ord_censur ORDER by id ASC"; $query = mysql_query($sql) or die(mysql_error());
// Her sker så det geniale. Vi konventerer å til å igen, efter at "tælle delen" er kørt, men lige akkurat før beskeden bliver vist i gæstebogen. // Dvs. at det nu igen er HTML måden som bogstaverne bliver vist på og man får ikke fejlen med stjernerne, og alle i verden kan nu se dem uden problemer :) $besked = str_replace($dansk, $htmlDansk, $besked);
Okay tak, jeg kigger på det :) troede nu ellers jeg skulle bruge explode til at splitte strengen.? Men ihvertfald det virkede fint med explode.. bare ikke det med store og små bogstaver ;)
Den er bare mere effektiv. Med mysql_fetch_array() kan du også gøre ting som at bede om værdien af $row[0] - altså data med index'et 0. Dette kræver selvfølgelig flere resourcer, end hvis du alligevel kun ønsker at få fat i $row["ord"].
Nå men dit script det virker lige som det skal :) Det er lidt surt, fordi vil jo gerne have lavet det selv og kunne have sagt det var mit.. Det kan jeg ikke længere.. Nå men sådan er det bare.. Det vigtigste er det virker korrekt nu :D Smiler..
Tak for hjælpen :) Smid et svar, så du kan få dine point.. ;)
Ja jeg kan se der er genbrugt lidt :) Det er jeg nu glad nok for, fordi det var første gang jeg skulle lave noget lignende det, så anede ikke om det var den "rigtige" metode.. Men det gik ret godt! :)
Tak for din hjælp :D
Med venlig hilsen Lasse Jensen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.