Utf8 og læsning af filer

5 views
Skip to first unread message

Bertel Lund Hansen

unread,
Nov 22, 2016, 4:54:47 AM11/22/16
to
Jeg er for ikke så længe siden gået over til utf8. Det har givet
nogle nye udfordringer. Det går smertefrit at lave selve
hjemmesiden fordi browserne også kender utf8, men ved læsning af
filer bliver der ballade. Php læser jo én byte ad gangen, så en
test som:

if (strpos(line,'æ')!==false)
echo line;

virker ikke. Jeg kan godt lave en workaround (omend den er
besværlig og skal rettes til til inputfilen), men der må være en
organiseret måde at gøre det på. Er der nogen der kan hjælpe?

PS. Jeg har stillet næsten samme spørgsmål i
Programmeringsgruppen fordi jeg har samme problem i Python.

--
Bertel
bertel.lundhansen.dk fiduso.dk obese.dk

Jan Hansen

unread,
Nov 22, 2016, 8:49:46 PM11/22/16
to
Hvis line ($line ???) kommer fra en anden fil, er problemet så ikke, at
du søger efter et æ skrevet i utf8, i en fil, der indeholder et æ skrevet
i f.eks. iso-8859-1? Det er til at lave æ'erne ens med
mb_convert_encoding.

<?php
$line=file_get_contents('inputfil');
$line=mb_convert_encoding($line,"UTF-8","ISO-8859-1");
if (strpos($line,'æ')!==false)
echo $line;

Ud fra det du har skrevet gætter jeg på du bare vil finde et æ et eller
andet sted. Hvis meningen er at finde ud af om et bestemt bogstav i en
tekststreng er et æ er det til at bruge mb_strpos.

<?php echo strpos('blåbærgrød','ø');

giver 8 hvis filen er ISO-8859-1, og 10 hvis den er UTF-8.
For at komme frem til 8 i en UTF-8 kodet fil er det nødvendigt at rette
linien til

<?php echo mb_strpos('blåbærgrød','ø',0,'UTF-8');





--
mvh Jan.
Help Microsoft stamp out piracy. Give
Linux to a friend today!

scootergrisen

unread,
Nov 23, 2016, 6:44:35 AM11/23/16
to
Der er nogen multibyte funktioner der starter med "mb_":
http://php.net/manual/en/ref.mbstring.php
Når mbstring er installeret.

https://netkoder.dk/netkoder/kode_strenge.php#multibyte_funktioner

Det er dog ikke alle funktioner der findes findes mb_ funktioner til så
der vil måske være nogle få ting du ikke kan få som du ønsker.

Ellers kunne du prøve og undersøge om der er sket forbedringer i PHP 7.0
der gør det lettere men hvis du skal bruge det på et webhotel går der
måske længe før de tilbyder den version.

Men prøv dig lidt frem også skriv igen med de ting du ikke kan få til at
virke.
Reply all
Reply to author
Forward
0 new messages