FAQ |
Kalender |
2009-01-10, 21:25 | #1 | |||
|
||||
Har WN som tidsfördriv
|
Jag vill skriva en funktion som filtrerar en sträng och gör den mera "url-vänlig". Den filtrerade strängen ska inte innhålla något annat än: A-Z, a-z, 0-9, och - (bindestreck). Jag vill dessutom konvertera alla åäö till aao. Till den första biten skulle jag nog kunna få ihop ett regexp med några timmars googlande. Men åäö-biten går jag bet på. Jag får det inte att funka med preg_replace och hexkoden \xe5 för å. Och jag kan inte skriva ett å som det är i koden. Binero verkar inte ha utf-8 som standard på sina servrar och jag kan inte göra om filen eftersom iconv inte finns. Jag kan inte ens se vilket character set som körs, för kommandot file finns inte.
Nuvarande funktion ser ut såhär: Kod:
function urlify($str) { $invalid=array(" ","<",">","?","&","#"); $replace=array("-","","","","",""); $str=str_replace($invalid,$replace,$str); $str=preg_replace("/\xe5/","a",$str); return $str; } |
|||
Svara med citat |
2009-01-11, 03:13 | #2 | ||
|
|||
Klarade millennium-buggen
|
Citat:
|
||
Svara med citat |
2009-01-11, 13:29 | #3 | ||
|
|||
Klarade millennium-buggen
|
vill du ha en fuktion som gör om utf-8 texten "Räksmörgås á la Carte?" till "raksmorgas_a_la_carte_" så får du titta på multibytefunktionerna i php.
steg 1: gör om till gemener mha mb_strtolower() steg 2: byt ut [åäöàéü(mellanslag)] till sin motsvarighet [aaoaeu_] med preg_replace() som kan hantera matriser med sök/ersätt steg 3: byt ut allt som inte är [abcdedfghijklmnopqrsuvwxyz0123456789_-] till [_] med preg_replace() . |
||
Svara med citat |
2009-01-11, 19:19 | #4 | |||
|
||||
Har WN som tidsfördriv
|
Tack för svaren, ska testa lite senare ikväll. Får se om man kan hitta någon bra guide till regexpen i php. (Varför kan inte alla implementationer av regexp funka likadant?)
|
|||
Svara med citat |
2009-01-11, 19:44 | #5 | ||
|
|||
Medlem
|
Har skrivit en liknande funktion. Min använder först PHPs strtolower för att få små bokstäver, sedan en str_replace för att byta åäö till aao. Sist kör jag Zend_Filter_Alnum på strängen som filtrerar bort allt förutom a-z och siffror.
Zend ramverket är bra på så sätt att du kan importera just det du behöver. |
||
Svara med citat |
2009-01-11, 19:49 | #6 | ||
|
|||
Klarade millennium-buggen
|
Den här länken går till en regexpsida där man kan testa sina regexsps:
http://www.cuneytyilmaz.com/prog/jrx/ |
||
Svara med citat |
2009-01-11, 23:03 | #7 | |||
|
||||
Har WN som tidsfördriv
|
Jag blir galen på de här förbannade regexpen. Hur gör jag för att matcha mot ett hexvärde?
Kod:
function urlify($str) { $str=preg_replace('/\xE5/','a',$str); return $str; } Citat:
|
|||
Svara med citat |
2009-01-12, 08:36 | #8 | |||
|
||||
Har WN som tidsfördriv
|
Har lyckats med att filtrera åäö nu, helvete vad jobbigt det är att försöka editera tecknen på de raderna när servern inte kör samma charset som laptopen. Aja, lite frågetecken och andra skräptecken i skriptet men det funkar.
Kod:
* * * *$str=ereg_replace("å",'a',$str); * * * *$str=ereg_replace("ä",'a',$str); * * * *$str=ereg_replace("ö",'o',$str); * * * *$str=ereg_replace("�^�",'A',$str); * * * *$str=ereg_replace("�^�",'A',$str); * * * *$str=ereg_replace("�^�",'O',$str); Kod:
$str=str_replace(' ','-',$str); Kod:
$str=mb_eregi_replace("[^a-z0-9\-_]","",$str); |
|||
Svara med citat |
2009-01-12, 09:32 | #9 | ||
|
|||
Klarade millennium-buggen
|
Det verkar fungera i alla fall, men ditt problem var att du ville byta ut ett hexvärde som passar en ISO-8859 i en utf-8 sträng, och den finns ju inte där.
jag skulle starkt rekommendera att utgå från utf8 , eventuellt kontrollera ditt indata så att det säkert är i rätt kodning, och sen kan du i lugn och ro byta vilka tecken du vill. Ett sätt att kontrollera vilken kodning strängen är med mb_detect_encoding() Typ så här: Kod:
$string= 'åäö'; $string_iso = *mb_convert_encoding($string,'ISO-8859-1',auto); echo mb_detect_encoding($string,'UTF8,ISO-8859-1').' '.urlify($string).'<br>'; echo mb_detect_encoding($string_iso,'UTF8,ISO-8859-1').' '.urlify($string_iso).'<br>'; function urlify($str) { * * * $str=preg_replace('/\xE5/','a',$str); * * * * return $str; } Citat:
|
||
Svara med citat |
2009-01-12, 11:21 | #10 | ||
|
|||
Klarade millennium-buggen
|
Utan att ha testat nu så har jag hittat några refernser på problemet med urlencode() resp urldecode():
urlencode(): http://www.phpdig.net/ref/rn64re1351.html urldecode(): http://www.phpdig.net/ref/rn64re1350.html |
||
Svara med citat |
Svara |
|
|