webForumDet fria alternativet

Å, Ä och Ö ersätts ej

PHP

3 svar · 557 visningar · startad av redrum

Medlem sedan okt. 20092 inlägg
Frågan#1

Jag har en php-fil som genererar en xml-fil i formatet utf-8, xml-filen måste ha formatet utf-8.
För att ersätta tecknen å, ä, ö och & använder jag följande kod

function fixname($fname){
    $match    = array('Å', 'Ä', 'Ö', 'å', 'ä', 'ö', '&');
    $replace  = array('a', 'a', 'o', 'a', 'a', 'o', '&');
    return str_replace($match, $replace, $fname);
}

& verkar ersättas ok, jag testade även att lägga in ' ' respektive '_', så att mellanslag ersätts med understreck, och det fungerade fint.

Problemet är att å, ä och ö ersätts ej. När jag kollar xml-filen i IE så får jag felmeddelande och i FF så ersätts å, ä, och ö med ?. I källkoden ser det doch ut som det skall.

Antar att det har med att servern är inställd på en_US.iso88591.
Finns det någon som kan svara på vad man kan göra för att det skall ersättas?

// Fredrik

Medlem sedan juni 20034 013 inlägg
#2

Å, ä och ö finns i UTF-8. Använd funktionen utf8_encode för att konvertera en sträng från iso-8859-1 till utf-8. Därefter kan du använda htmlentities() för att översätta & m fl.

Medlem sedan maj 20071 061 inlägg
#3

Beroende på vad du kör för ftp klient att tanka upp filerna kan tecken som åäö bli knas och där med inte kännas igen. Ett tipps är att använda Ascii coderna med kommandot chr(), då kan du vara 100% säker på koden är okej. Omständligt men säkert.

Medlem sedan okt. 20092 inlägg
#4

Tackar för era svar.

Allt jag gjorde var att ändra

fwrite($fp, $data);

till

fwrite($fp, utf8_encode($data));

Detta verkar fungera, så stort tack tydal som "pointed me in the right direction"

251 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
118 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)