Die Ausgabe verwirrt. Sicher, dass das so passt? Encoding?
Gib mal die URLs mittels ord() aus und schaue, ob da nicht ein paar verquere UTF-8-Zeichen dazwischen sind.
Hallo,
ich empfange über die Klasse WebIcqLite ICQ-Nachrichten über ein PHP-Skript.
Die empfangenen Nachrichten sind soweit lesbar, außer die Hyperlinks.
Beispiel http://google.de:Ich weis ja leider nicht, wie die Hyperlinks codiert sind und weis auch nicht, wie ich das herausfinden soll, aber vllt. gibt es da ja einen Standard, den ihr kennt?goog??.d?/
Ich habe es bereits mitversucht, dabei kam dann folgendes heraus:PHP-Code:htmlspecialchars(urldecode());
Hoffe, mir kann jemand helfen._http:// ??ogle?de_
MfG Erstar
-.-
Die Ausgabe verwirrt. Sicher, dass das so passt? Encoding?
Gib mal die URLs mittels ord() aus und schaue, ob da nicht ein paar verquere UTF-8-Zeichen dazwischen sind.
Wo kämen wir denn hin, wenn wir keine Träume mehr hätten? ™
Medienagentur shark-design :: Internet, Druck & Kommunikation für Braunschweig und Hamburg
Wo kämen wir denn hin, wenn wir in Besprechungen keinen Spaß mehr hätten?
Projektmanagement für IT und Medien in Hamburg
Moin,
erstmal Danke für die Antwort.
Folgendes kleines Skript hab ich mir schnell gebastelt zur Ausgabe von ord(), als Beispiel dient wieder http://www.google.de:
Ausgabe (direkt beim empfangen, ohne Umwege):PHP-Code:$input = $url;
$count = strlen($input);
for($i=1;$i<=$count;$i++)
{
$calc = $i - "1";
$alpha = substr($input, $calc, 1);
$ord = ord($alpha);
echo "Zeichen ".$i.": ".$ord."<br>";
}
Dann hab ich nochmal in die Mysql-DB geguckt, in der die empfangenen Nachrichten gespeichert werden.Zeichen 1: 0
Zeichen 2: 103
Zeichen 3: 0
Zeichen 4: 111
Zeichen 5: 0
Zeichen 6: 111
Zeichen 7: 0
Zeichen 8: 103
Zeichen 9: 0
Zeichen 10: 63
Zeichen 11: 0
Zeichen 12: 63
Zeichen 13: 0
Zeichen 14: 46
Zeichen 15: 0
Zeichen 16: 63
Zeichen 17: 0
Zeichen 18: 101
Die Ausgabe des Mysql-Datenbankeintrages in meinem richtigen Skript sieht dann wieder so aus:�g�o�o�g�?�?�.�?�e
Was mögen diese Zeichen bedeuten?goog??.?e
MfG Erstar
Geändert von Erstar (13.04.2012 um 12:10 Uhr)
-.-
Der "ORD()-Test" zeigt, dass da 2 byte pro Zeichen für "google.de" eintrudeln. In der Kombination mit dem String "http://", der vielleicht nur mit 1 byte pro Zeichen kommt, kann das der Grund für den Effekt sein.
Schau Dir noch mal die Encoding-Einstellungen für die Kette Datenbank-PHP-HTML/Browser an... da könntest Du fündig werden.
Wo kämen wir denn hin, wenn wir keine Träume mehr hätten? ™
Medienagentur shark-design :: Internet, Druck & Kommunikation für Braunschweig und Hamburg
Wo kämen wir denn hin, wenn wir in Besprechungen keinen Spaß mehr hätten?
Projektmanagement für IT und Medien in Hamburg
Wo genau finde ich diese Einstellungen?Schau Dir noch mal die Encoding-Einstellungen für die Kette Datenbank-PHP-HTML/Browser an... da könntest Du fündig werden.
-.-
Wo und was hast Du bisher recherchiert?
Welche alternativen Schlüsse konntest Du bisher aus den Erkenntnissen ziehen?
Lass Dir die 1byte/2byte-Sache noch mal durch den Kopf gehen.
Wo kämen wir denn hin, wenn wir keine Träume mehr hätten? ™
Medienagentur shark-design :: Internet, Druck & Kommunikation für Braunschweig und Hamburg
Wo kämen wir denn hin, wenn wir in Besprechungen keinen Spaß mehr hätten?
Projektmanagement für IT und Medien in Hamburg
//Edit:
Die Lösung.
ICQ schickt anscheinend schon das Format mit der Nachricht mit.
Darum kann man folgendes machen:
Dann funktioniert es.PHP-Code:if (isset($msg['encoding']) && is_array($msg['encoding']))
{
if ($msg['encoding']['numset'] === 'UNICODE')
{
$msg['realmessage'] = $msg['message'];
$msg['message'] = mb_convert_encoding($msg['message'], 'cp1251', 'UTF-16');
}
if ($msg['encoding']['numset'] === 'UTF-8')
{
$msg['realmessage'] = $msg['message'];
$msg['message'] = mb_convert_encoding($msg['message'], 'cp1251', 'UTF-8');
}
}
MfG Erstar
Geändert von Erstar (19.04.2012 um 10:41 Uhr)
-.-
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)