Kör setlocale() tidigare i skriptet. Någon av följande kombinationer brukar fungera:
setlocale(LC_ALL, 'sv_SE');
setlocale(LC_ALL, 'swedish');
setlocale(LC_ALL, 'sv_SE.ISO8859-1');
Då ska du nog få med åäö att ingå i \w.
4 svar · 560 visningar · startad av Ankman
Jag vill ta bort ord som är kortare än tre tecken eller längre än 20 tecken från en sträng. Så här långt har jag kommit:
$text = preg_replace('/(\s[\w]{1,2}\s)|(\s[\w]{20,}\s)i/', ' ', $text);
Problemet kommer när orden innehåller åäö, då funkar det inte. Jag har även provat att byta ut bokstavsklassen(heter det så?) mot [a-z0-9åäö] men resultatet blir det samma.
Någon som är bra på detta?
(Om man använder [php]-taggen så tas alla "\" bort från texten, märkligt)
Kör setlocale() tidigare i skriptet. Någon av följande kombinationer brukar fungera:
setlocale(LC_ALL, 'sv_SE');
setlocale(LC_ALL, 'swedish');
setlocale(LC_ALL, 'sv_SE.ISO8859-1');
Då ska du nog få med åäö att ingå i \w.
Det fungerar utsökt, åäö kommer med nu (jag använde den första varianten). Dock får jag det fortfarande inte att fungera som jag vill. Alla korta ord rensas bort men inte långa. Jag har ändrat lite:
$text = preg_replace('/(\b[\w]{1,2}\b)|(\b[\w]{20,}\b)i/', ' ', $text);
Är detta förresten rätt sätt att använda \b på? Det verkar i alla fall fungera som jag vill.
Funkar prima, tackar.