WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   UTF8-output från PHP (https://www.wn.se/forum/showthread.php?t=15711)

andi 2006-08-19 20:54

Hej

När jag skickar utdata från PHP-skript i UTF8 så inleds utdatan alltid med
följande tecken: "".

Vad kommer dessa tecken ifrån?
Måste PHP-scriptet kodas i utf-8?
Skall man använda utf8_decode och utf8_encode?

Jag har utdata både från MySQL och från andra sidor som mitt script laddar hem
och extraherar data ifrån.

/Andreas

zoran 2006-08-19 22:26

Det där är BOM (Byte Order Mark) i början av UTF-8 filen. Det går att spara UTF-8 filer utan de, men det är ju din editor som avgör. Sen är det frågan om just din PHP-fil måste vara UTF-8 enkodad bara för att du hanterar UTF-8 data. Det behöver den inte nämnligen.

andi 2006-08-21 19:31

OK, tack!
Är "" ett tecken eller tre?
Hur kan man ta bort dessa tecken i PHP??

/Andreas

Pucken 2006-08-21 20:00

Citat:

Originally posted by andi@Aug 21 2006, 19:31
OK, tack!
Är "" ett tecken eller tre?
Hur kan man ta bort dessa tecken i PHP??

/Andreas

Vilken texteditor använder du?

koala 2006-08-21 21:30

Ett tips är att det finns en extension: multibyte, som klarar av att göra t ex preg_match på åäö om dessa är kodade i utf-8. Har börjat hata det faktum att jag numera programmerar i UTF-8 i editorn, och sparar texter som utf-8 i databasen, vilket ger upphov till diverse problem här och var i de inbyggda funktionerna, när man har åäö i texten.

Har något ett bättre förslag på hur följande kod kan skrivas under omständigheterna? (mb_split finns inte installerat)

Koden tar ut de ord som förekommer i strängen $phrase, och returnerar dem som array.

Kod:

$phrase = utf8_decode($phrase);
 
/**
* Det vore bättre att använda multibyte extension (ej installerad som standard).
*        mb_internal_encoding('UTF-8');
* mb_regex_encoding('UTF-8');
* //setlocale(LC_ALL, 'sv_SE');
*        mb_split(...);
*/

$words = preg_split('/[^a-z0-9\-?????????????]+/', strtolower($phrase), -1, PREG_SPLIT_NO_EMPTY);
 
// Vi vill ha tillbaka allt i utf-8 igen
foreach ($words as $i => $word) {
        $words[$i] = utf8_encode($word);
}


Där alla ???? står har jag skrivit in specialtecken såsom åäöáà, etc. Pga att php-filen sparas som utf-8 blev dock detta fel, eftersom preg_split vill ha tecken i iso-8859-1. Mycket fult... Istället öppnade jag alltså filen som iso-8859-1 och skrev in dessa tecken, och sparade filen. Nu ser det ju rätt fult ut... Kanske vore det bättre att skriva in dem som utf-8 och sedan köra en utf8_decode på tecknen... hm... nåja... synpunkter på det hela?


Alla tider är GMT +2. Klockan är nu 22:48.

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