FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Jag har en text i UTF8 som jag behöver konvertera till ISO-8859-1. Men vissa tecken blir inte konverterade. Exempelvis detta tecken:
“ Det är alltså ett citationstecken. På engelska heter tecknet "left double quotation mark". I utf8 består den av tre bytes: 226 128 156. Man kan nog också skriva tecknet som U+201C http://www.fileformat.info/info/unicode/ch.../201c/index.htm Jag har provat att konvertera tecknet med hjälp av utf8_decode() i PHP, men jag får bara ett frågetecken som resultat. Finns inte tecknet i ISO-8859-1 eller vad? Jag noterar att Webmasternetwork.se, som visas i ISO-8859-1, kan visa mitt tecken ovan. Så det borde ju gå att konvertera? Tacksam för tips om vad jag gör för fel. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Flitig postare
|
Jag hittade en lösning
Kod:
$badchr = array( "\xe2\x80\xa6", // ellipsis "\xe2\x80\x93", // long dash "\xe2\x80\x94", // long dash "\xe2\x80\x98", // single quote opening "\xe2\x80\x99", // single quote closing "\xe2\x80\x9c", // double quote opening "\xe2\x80\x9d", // double quote closing "\xe2\x80\xa2" // dot used for bullet points ); $goodchr = array( '...', '-', '-', '\'', '\'', '"', '"', '*' ); $str=str_replace($badchr,$goodchr,$str); |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Det är inte så konstigt alls. Tecknet finns inte definierat i iso-8859-1. Därmed kan du inte konvertera det från utf-8 till iso-8859-1. Det kommer troligen från windows codepage 1522.
En bra förklaring: http://bytes.com/groups/php/2773-smart-quotes-php Finns flera möjliga lösningar på http://www.php.net/utf8_encode |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Medlem
|
Det är snarare så att det finns definierat - men inte som skrivbara tecken.
|
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Den bästa lösningen är förstås att genomgående använda utf-8 så slipper man att fel och brister i konvertering och begränsningarna i ISO.
(Sedan är förstås utf-8-stödet i php ganska uselt tyvärr.) |
|||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Supermoderator
|
Citat:
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Mycket flitig postare
|
Citat:
Bättre vore en default_string_encoding som mb_string har för att slippa mystiska problem. |
|||
![]() |
![]() |
![]() |
#9 | |||
|
||||
Bara ett inlägg till!
|
I codepage ISO-8859-1 (aka Latin1) finns, som tidigare sagt, icke tecknet “ utan endast ", och därför går det egentligen inte att konvertera.
Varför visas ändå tecknet “ i våra webbläsare? Antagligen är det så att när webbservern skickar datat till klienten, och ser att här kommer det visst ett unicode-tecken så försöker den en fuling och skickar unicode-koden för “-tecknet istället. Detta kan den göra eftersom Unicode är en slags utökning av ISO-8859-1. Inte riktigt "rätt" men resultatet blir foolproof. Mer info: http://en.wikipedia.org/wiki/ISO_8859-1 |
|||
![]() |
![]() |
![]() |
#10 | |||
|
||||
Mycket flitig postare
|
Citat:
PS. Om webbservern på något sätt skulle parsa text den skickar till webbläsaren vore ju risken stor att man skulle få korrupta bilder eller liknande. |
|||
![]() |
![]() |
Svara |
|
|