WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Problem med substr och ÅÄÖ (https://www.wn.se/forum/showthread.php?t=1040317)

grinditwp 2010-02-02 09:57

Problem med substr och ÅÄÖ
 
PHP-kod:

echo substr('Monday'03); //Skriver ut Mon, förväntas Mon
echo substr('Måndag'03); //Skriver ut Må, förväntas Mån 

Hur kringgår man detta problem? Att åäö verkar räknas som två tecken var.

PHP-kod:

echo strlen('å').'<br>'//Skriver ut 2 

Har inte för mig att det varit såhär tidigare... Aldrig haft problemet innan...
Dokumentet är sparat som UTF-8 (utan BOM), samt att jag lagt till header('Content-type: text/html; charset=utf-8');

tartareandesire 2010-02-02 10:15

Använd mb_substr istället.

grinditwp 2010-02-02 11:43

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20341296)
Använd mb_substr istället.

tack... men varför är det så här dumt gjort?

Westman 2010-02-02 11:48

Enkelt förklarat, UTF8 sparar icke-ASCII i två bitar (två tecken). Jmfr. "two bit characters"

Westman 2010-02-02 11:51

Kan väl tillägga att du inte är ensam om att få problemet och även om man har vetat om det förut så hinner man glömma det till nästa gång och då sitter man och kliar sig i skallen och undrar varför... :)

tartareandesire 2010-02-02 12:09

Citat:

Ursprungligen postat av grinditwp (Inlägg 20341307)
tack... men varför är det så här dumt gjort?

Har du en bättre lösning? :) Det finns en hel del tecken som ryms inom utf-8.

grinditwp 2010-02-03 23:43

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20341318)
Har du en bättre lösning? :) Det finns en hel del tecken som ryms inom utf-8.

:) njä, men syftade väll snarare till varför substr + andra funktioner inte automatiskt åtgärdade detta. Kan inte komma på en vettig situation då man faktiskt vill att det skall fungera som det gör nu, istället har man skapat en annan liknande funktion :P onödigt :)

Magnus_A 2010-02-03 23:54

Det är hål i huvudet att inte bygga funktioner som klarar av UTF från början. Ett tråkigt utslag av amerikansk etnocentricitet.

emilv 2010-02-04 06:44

Citat:

Ursprungligen postat av grinditwp (Inlägg 20341565)
:) njä, men syftade väll snarare till varför substr + andra funktioner inte automatiskt åtgärdade detta. Kan inte komma på en vettig situation då man faktiskt vill att det skall fungera som det gör nu, istället har man skapat en annan liknande funktion :P onödigt :)

Då har du förstås aldrig jobbat med binärdata heller? Det finns gånger då man vill veta hur många byte det är utan att funktionen gör automatiska antagningar om teckenkodningen.

Dessutom står det ju klart och tydligt i manualen vilken teckenkodning funktionen använder (ISO-8859-1 som resten av PHP). Det är du som vill köra en annan teckenkodning än funktionen är byggd för. Fast visst vore det smidigt om substr hade samma funktion som mb_substr har idag, med en tredje parameter för teckenkodningen.

emilv 2010-02-04 06:49

Citat:

Ursprungligen postat av Magnus_A (Inlägg 20341566)
Det är hål i huvudet att inte bygga funktioner som klarar av UTF från början. Ett tråkigt utslag av amerikansk etnocentricitet.

Det står var och en fritt att laga PHP. Dess rötter är i ett fulhack från långt tillbaka, så det är klart att inte allt bytt till det senaste på tapeten. UTF-8 var bara ett par år gammalt när första versionen av PHP skapades. Användningen av ISO-8859-1 var däremot utbredd.

Vad Israel har med "amerikansk etnocentricitet" att göra vet jag dock inte; PHP är som bekant en israelisk produkt.


Alla tider är GMT +2. Klockan är nu 13:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson