Rare tekens bij file(*.vmg);
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
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.
Code (php)
1
2
2
B�E�G�I�N�:�V�M�S�G�
�V�E�R�S�I�O�N�:�1�.�1�
�V�E�R�S�I�O�N�:�1�.�1�
Weet iemand hoe ik die rare tekens tussendoor kan voorkomen?
Maar als je � weghaalt hou je de gewone tekst over.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array = array('B�E�G�I�N�:�V�M�S�G�',
'�V�E�R�S�I�O�N�:�1�.�1�');
foreach($array as $value)
{
echo str_replace('�', '', $value) . '<br />';
}
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
$array = array('B�E�G�I�N�:�V�M�S�G�',
'�V�E�R�S�I�O�N�:�1�.�1�');
foreach($array as $value)
{
echo str_replace('�', '', $value) . '<br />';
}
?>
Output:
BEGIN:VMSG
VERSION:1.1
En het is eigenlijk symptoombestrijding natuurlijk, en dat heb ik liever niet ;).
� zou een character moeten zijn. Als dat onbekend is wordt er inderdaad een blokje neergezet.
Maar waarom staat dat character er dan? In het originele bestand (open in kladblok) zit dat er niet.
Geen idee.
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.
[weg]
Gewijzigd op 01/01/1970 01:00:00 door Stephan Vierkant
Volgens internet is het UTF-16LE, en inderdaad, als je het met iconv omzet naar UTF-8 ben je die vreemde karakters kwijt.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$data = file_get_contents('31235391210_2008-06-25.vmg');
echo iconv('utf-16LE', 'utf-8', $data);
?>
$data = file_get_contents('31235391210_2008-06-25.vmg');
echo iconv('utf-16LE', 'utf-8', $data);
?>
Bedankt, dit is de oplossing!