Ik heb al mijn SMS'jes van mijn Nokia-telefoon opgeslagen op mijn pc. Het zijn allemaal losse bestandjes, met deze inhoud:
BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:
X-IRMC-BOX:INBOX
X-NOK-DT:20080624T221242Z
X-MESSAGE-TYPE:DELIVER
BEGIN:VCARD
VERSION:3.0
N:
TEL:+*****
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:24.06.2008 22:12:42
U heeft 1 gemiste oproep van +*****.
Laatste oproep:24/06/08, 23:16 uur.
Dit is een gratis sms van T-Mobile, zie www.t-mobile.nl/gemisteoproepsms.
END:VBODY
END:VENV
END:VMSG
Nu wil ik deze sms'jes in een database stoppen met PHP. Ik krijg bij het openen met file(); echter allerlei rare tekens. Ook als ik het bestand gewoon i in de browser open, heb ik dat probleem.
Ik heb geen idee waar het vandaan komt.
Maar als je � weghaalt hou je de gewone tekst over.
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
Kan je eens zo'n bestandje onbewerkt ergens uploaden? Het zou zomaar kunnen dat het bestandje een andere charset gebruikt. Normaal zijn alle karakters 1 byte (8 ééntjes en nulletjes) lang, maar omdat je dan maar een heel klein aantal verschillende tekens kan gebruiken, zijn er in de loop der jaren heel wat charsets bijgekomen. Als het bestandje een charset gebruikt die ieder karakter 2 bytes geeft, en je browser heeft dat niet door, en denkt dat die 2e byte een nieuw karakter is (of PHP heeft het niet door, hoe verstuur je die bestanden eigenlijk naar de browser? Haal je ze eerst door htmlentities o.i.d. heen?) dan zou je zoiets kunnen krijgen.
Volgens internet is het UTF-16LE, en inderdaad, als je het met [php]iconv[/php] omzet naar UTF-8 ben je die vreemde karakters kwijt.
<?php
$data = file_get_contents('31235391210_2008-06-25.vmg');