Avatar billede exp Juniormester
18. juli 2003 - 09:35 Der er 24 kommentarer og
2 løsninger

regular expressions - erstatte alle ugyldige tegn

Jeg har et tekstfelt hvor brugere kan indtaste en tekst der skal bruges som henvisning i en opremsning af tekster (i ved: <a name="noget">)

Får at lette brugervenligheden, skal jeg bruge en funktion der gør 3 ting (ikke nødvendigvis i nævnte rækkefølge):

Når brugeren har indtastet fx følgende:

"Spørgsmål om videre udvikling af jens' dødemandsknap"

så skal der ske dette:

1. Store bogstaver konverteres tl små (strtolower())

2. Systemet erstatter alle "ulovlige tegn" (', ", (komma), ., @ etc) med "" (altså ingenting) samt æ=ae ø=oe å=aa

Det er vel bedre med noget regular expressions istedet for en uendelig lang række str_replace()

3: Erstatter alle mellemrum med "_" (str_replace(" ", "_", $str)

Igen, er det bedre med reg.exp? Hvis der ved en fejl er trykket mellemrum 2 (eller 3 eller 4...) gange efter hinanden skal det stadig kun erstattes med én _

4: Poppe en besked op (evt en javascript-alert-boks) med teksten:
"Dit hotlink er rettet til:
Spoergsmaal_om_videre_udvikling_af_jens_doedemandsknap

OK / Annullér"

if (OK) {
  //gennemfør query
} elseif (annuller) {
  //gennemfør IKKE query, bliv på indtastningssiden
}

Nogen der kan trylle?
Avatar billede squashguy Nybegynder
18. juli 2003 - 09:55 #1
uden at tænke mig grundigt om, ville jeg umiddelbart løse de 3 første punkter således:

<?php
$str = "Spør.gsmål, om@          videre udvikling af jens' dødemandsknap";

// til lowercase
$str = strtolower($str);

// liste af ulovlige tegn
$ulovlige_tegn = ",.@'";

// fjern ulovlige tegn
$ulovlige_tegn = preg_quote($ulovlige_tegn);
$str = ereg_replace("[$ulovlige_tegn]", "", $str);

// erstat alle white characters (space,tab etc) med een underscore
$str = ereg_replace("[[:space:]]{1,}", "_", $str);

// æ -> ae
$str = str_replace("æ", "ae", $str);
// ø -> oe
$str = str_replace("ø", "oe", $str);
// å -> aa
$str = str_replace("å", "aa", $str);


echo $str;

?>
Avatar billede exp Juniormester
18. juli 2003 - 09:57 #2
glemte self lige noget i spm - hvis der er flere æøå skal de konverteres til et af det pågældende bogstaver - fx ææ erstattes med ae, øøø med oe etc
Avatar billede andy Nybegynder
18. juli 2003 - 10:08 #3
$str = "Spørgsmål om videre  udvikling af jens' dødemandsknap.\"&%¤/&(";
$str = strtolower($str);
$str = ereg_replace("æ+", "ae", $str);
$str = ereg_replace("ø+", "oe", $str);
$str = ereg_replace("å+", "aa", $str);
$str = ereg_replace("[^[:alnum:][:space:]]", "", $str);
$str = ereg_replace("[ ]+", "_", $str);
echo $str;
Avatar billede exp Juniormester
18. juli 2003 - 10:31 #4
Her kan i se det midlertidige resultat - øverst står den linie der fyres igennem jeres scripts...

Har ikke ændret i jeres scripts - tror dog fx i squashguys, at alle de ulovlige tegn let kan fjernes ved at tilføje dem har:
$ulovlige_tegn = ",.@'";

Det der undrer mig i jeres scripts er, at ÅÅ ikke konverteres til åå...
Avatar billede exp Juniormester
18. juli 2003 - 10:31 #5
Avatar billede andy Nybegynder
18. juli 2003 - 10:42 #6
Prøv at smide setlocale(LC_ALL, "dk_DK"); i toppen af scriptet.
Avatar billede exp Juniormester
18. juli 2003 - 10:44 #7
www.firewerx.dk/www/str.php <== no changes :-(
Avatar billede andy Nybegynder
18. juli 2003 - 10:48 #8
hmm, ok. Virker ellers her. SÅ brug:
$str = strtolower($str);
$str = eregi_replace("æ+", "ae", $str);
$str = eregi_replace("ø+", "oe", $str);
$str = eregi_replace("å+", "aa", $str);
$str = ereg_replace("[^[:alnum:][:space:]]", "", $str);
$str = ereg_replace("[ ]+", "_", $str);
echo $str;
Avatar billede exp Juniormester
18. juli 2003 - 10:57 #9
afaics no changes...
Avatar billede exp Juniormester
18. juli 2003 - 11:03 #10
Mystisk... det virker her:
http://kjeldsen.1go.dk/test/str.php
Avatar billede andy Nybegynder
18. juli 2003 - 11:03 #11
Really? Virker igen her på RH Linux/Apache/PHP 4.3.1
Avatar billede andy Nybegynder
18. juli 2003 - 11:09 #12
Kører firewerx.dk på windows? if so så prøv setlocale("LC_CTYPE", "danish");
Avatar billede exp Juniormester
18. juli 2003 - 11:11 #13
Ved det faktisk ikke... den ligger hos starthotel...
Avatar billede exp Juniormester
18. juli 2003 - 11:13 #14
Warning: setlocale() [function.setlocale]: Passing locale category name as string is deprecated. Use the LC_* -constants instead. in /home/web/kjeldsen/firewerx.dk/www/str.php on line 2
Avatar billede andy Nybegynder
18. juli 2003 - 11:22 #15
lol, my mistake.

setlocale(LC_CTYPE, "danish");
Avatar billede exp Juniormester
18. juli 2003 - 11:25 #16
nope...
Avatar billede noden Nybegynder
18. juli 2003 - 17:35 #17
Der findes nu også en <?PHP $nyarray = strip_tags($gammelarray); ?>
Af gode grunde kun til "tags"
Avatar billede squashguy Nybegynder
18. juli 2003 - 18:34 #18
endnu en udgave

<?php
$str = "Spøøøøøøør.gsmål, om@  æg        videre udvikling af jens' dødemandsknap";

$str = strtolower($str);
$str = ereg_replace("[^A-Za-zæøå0-9_[:space:]]", "", $str);
$str = ereg_replace("[[:space:]]+", "_", $str);
$dk_tegn = array("/æ+/", "/ø+/", "/å+/");
$dk_erstat = array("ae", "oe", "aa");
$str = preg_replace($dk_tegn, $dk_erstat, $str);
echo $str;
?>
Avatar billede exp Juniormester
19. juli 2003 - 19:43 #19
De ser ud til det virker det hele...
squashguy's virker begge steder, andy's kun på 1go-serveren... Vil lige overveje pointfordelingen :-)

Den vil ske umiddelbart efter svaret på spørgsmål 4 er fundet ;-)
4: Poppe en besked op (evt en javascript-alert-boks) med teksten:
"Dit hotlink er rettet til:
spoergsmaal_om_videre_udvikling_af_jens_doedemandsknapaeoeaa

OK / Annullér"

if (OK) {
  //gennemfør query
} elseif (annuller) {
  //gennemfør IKKE query, bliv på indtastningssiden
}
Avatar billede exp Juniormester
22. juli 2003 - 12:39 #20
Er i helt blanke, oder...?!?

Skal jeg tage del fire og poste den i javascript istedet?
Avatar billede squashguy Nybegynder
23. juli 2003 - 07:35 #21
4eren kunne f.eks. se således ud:

<script>
str = "Spøøøøøøør.gsmål, om@  æg        videre udvikling af jens' dødemandsknap";
str = str.toLowerCase();
str = str.replace(/æ+/g, "ae");
str = str.replace(/ø+/g, "oe");
str = str.replace(/å+/g, "aa");
str = str.replace(/[^A-Za-z0-9 ]/g, "");
str = str.replace(/ +/g, "_");

if(confirm("Dit hotlink er rettet til:\n" + str)){

}else{
    alert("du valgte at annullere.");
}
</script>
Avatar billede squashguy Nybegynder
23. juli 2003 - 07:36 #22
(dette er jo så javascript)
Avatar billede exp Juniormester
24. juli 2003 - 12:32 #23
Vil gerne hvis jeg kan få kombineret alert-boksen med et af de ovenstående php-scripts, da min viden indenfor js er sådan ca mikrolille (og så kan jeg jo ikke rigtig ændre i det, vel *g*)
Avatar billede exp Juniormester
27. juli 2003 - 14:56 #24
Anyone?
Avatar billede exp Juniormester
28. juli 2003 - 21:00 #25
Det bliver vist squashguys metode der kommer nærmest

andy, smider du lige et svar, så får du også point!
Avatar billede exp Juniormester
20. august 2003 - 11:09 #26
nå, så kan du da blive fri andy ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester