![]() |
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) { |
Citat:
|
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() . |
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?)
|
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. |
Den här länken går till en regexpsida där man kan testa sina regexsps:
http://www.cuneytyilmaz.com/prog/jrx/ |
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) { Citat:
|
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); Kod:
$str=str_replace(' ','-',$str); Kod:
$str=mb_eregi_replace("[^a-z0-9\-_]","",$str); |
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= 'åäö'; Citat:
|
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 |
Jag har utf8 överallt, i databasen, i min output till browsern... Har även i min init.php stoppat in en SET NAMES UTF8 till databasen.
|
Citat:
Om du jobbar med utf8 kan du glömma hexkoderna till åäö. |
Jag kan inte göra editeringen i utf8. Jag kör Linux på min laptop och har utf8 på den. Sedan sitter jag över ssh mot binero och editerar filerna. Binero kör inte utf8 av någon udda anledning. Man kanske borde maila och be om att få file och iconv till sitt konto?
|
Det är du som gör filerna som bestämmer kodningen. Inte webbhotellet.
Så här ställer du in default charset i apache via .htaccess http://www.w3.org/International/questions/...taccess-charset Lägg också till information om kodning i metataggen. Sen är det bara att köra. |
Och hur bestämmer jag encoding i nano? Går inte den efter vad servern har som default?
Och jag behöver inte sätta någon encoding i .htaccess eftersom jag skickar en Content-Type header vid varje request. Jag kör ju application/xhtml+xml som mime-typ. |
Citat:
|
Citat:
|
Ja, har man inte problem med kodningen så skaffar man sig.
har du aldrig tänkt på att sluta gnälla på Binero och skaffa dig en riktig uppsättning verktyg som fungerar för det du ska göra? |
Citat:
|
Citat:
Citat:
|
Kod:
bash-3.2$ locale -a |
Citat:
Dom måste ju själva ha blockerat möjligheten att byta lokal - men i så fall är det väl inte mer än rimligt att man kör utf-8 för alla då! (iso-8859-1 är ju trots allt bara ett subset av utf-8 så ingen blir lidande) Är dom rädda för teckenkodningar där på Binero måntro (det finns ju en liten ettrig grupp "behålla-iso"-anhängare, som inte riktigt förstår teckenkodning och alltså heller inte vågar byta… ;-) |
Finns väl inget som tvingar dig att ligga och editera filerna på plats i terminalen?
Editera och spara lokalt och över för den färdiga filen sen. Det kostar inget och det blir rätt. Lägger du upp en lokal server på din laptop så kan du i lugn och ro testa dina ändringar där istället för att editera live. Du vill ju jobba seriöst med webbutveckling, börja med att bygga upp en arbetsmetodik som fungerar med versionshantering, testkörning lokalt i skyddad miljö, och ha koll på grejerna. Då jobbar du effektivare, mer kvalitetssäkrat och bättre. Och det kostar ingenting heller. Sätt fokus på rätt saker, nu gör du bara ett förvirrat intryck. |
Jag har en server på min laptop, men jag kan inte stoppa så mycket där just nu. Har ett annat projekt på laptopen, som använder mod_rewrite och snor alla urler. Så fort jag har nånstans att bo ska jag ordna en testserver.
|
Citat:
Men har man (och betalar för) SSH-tillgång så ska man väl kunna kräva att det fungerar? Syften kan ju mycket väl vara att gå in och göra små ändringar med unix kraftfulla om än obskyra verktyg (texteditorerna, perl, osv.). För många (mindre vanliga) uppgifter är unix:s sätt att pipe:a, spara, skapa och regexp-bearbeta eller söka filer närmast oslagbart. Det är ju olyckligt om man inte kan få fungerande stöd för något som är så viktigt nu för tiden som utf-8. (Webbhotell är ju till för personer som inte har licenser på hela Adobe-serien eller kör VS i senaste versionen och bara slänger in en rackserver till om det skulle behövas… ;) - man ska väl för den delen ändå kunna kräva att det fungerar?) |
Går du in med ssh och ska ha utf8 att fungera skriver man såhär:
LANG=utf8 ssh user@server Orsaken är bagg i ssh, eller enklare utryckt, amerikanerna som kör ssh sk-ter i folk som använder konstiga bokstäver. Om man ska ställa in locale på BSD-servrar, som jag tror Binero kör på, så gäller setenv istället för locale. Men skaffa dig en riktig uppsättning verktyg så slipper du krångla. Hört talas om virtual hosts på apache? Går utmärkt att köra lokalt , lägg in din fake-domän i /etc/hosts bara. |
Kod:
LANG=utf8 ssh user@server Jag ska skaffa riktiga grejer. Har äntligen fixat en lägenhet. Får den 1feb, sen en 100/100 lina så hostar jag allt som inte är under typ 10mb hemma. Då kan jag få det som jag vill. :) Ska kika på att köra en fakedomän. Har faktiskt inte tänkt på att man kan göra det.... |
Jag hittade en funktion som jag gillade riktigt bra.. Moddade den lite så den blev ännu bättre...
Kod:
function makeSafe( $s, $charset='UTF-8' ) { Sen kan man ju komplettera den med extra funk, t.ex. bara små bokstäver, ta bort specialtecken osv. Nu är ju alla viktiga bokstäver i godkända (A-Za-z)... Have fun folks ! |
För den händelse någon är intresserad så ser min färdiga funktion ut såhär:
Kod:
function urlify($str) { |
Alla tider är GMT +2. Klockan är nu 20:29. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson