Kommunikation zwischen Tcl & PHP Script

Hallo :)

Ich betreibe einen kleinen Chat, der unter anderem auch auf Tcl basiert. Jetzt hab ich etwas gebastelt, um sich im Chat das Wetter der eigenen Stadt anzeigen zu lassen, mittels Google Wetter API.

Ein PHP Script wertet die XML Datei von Google aus und gibt die Informationen dann mit ## getrennt aus.
Der Name der Stadt wird über GET Parameter überliefert.

Auf der Tcl Seite sieht das dann so bei mir aus:
Code:
  package require http

  proc weather { arg arg2 } {
    set agent "Mozilla"

    set a http://url.de/weather.php?location=
    set b $arg
    set c &day=
    set d $arg2

    set query "$a$b$c$d"

    set token [http::config -useragent $agent]
    set token [http::geturl $query]
    upvar #0 $token state
    set content $state(body)

    set list [split $content ##]
    return $list
  }
Das Ganze funktioniert auch soweit sehr gut, nur machen Umlaute Probleme. Wenn ich zB die Daten für München abfragen lassen will, funktioniert es nicht mehr. Ich hab jetzt in die PHP Datei etwas gebaut, was in eine Datei schreibt was tatsächlich beim PHP Script ankommt. Bei München kommt nur "M" an, anscheinend werden bei Umlauten der jeweilige Umlaut und alles danach abgeschnitten.

Weiß jemand woran das liegt und wie ich das beheben könnte?

Mfg Latias
 
heyho

schau mal nach utf8_decode in php, bzw. dem header() die richtigen daten mitgeben. aber ich vermute fast, dass dein tcl script mit utf8 nich klar kommt und daher das abschneidet.
daher nach iso übersetzen.

ne dirty hack variante wäre sowas wie

PHP:
<?php

$um = array("ä","ü","ö");
$un = array("ae","ue","oe");

str_replace($um,$un,$str);

je nachdem wie dus brauchst ;)
sauberer ist aber auf jeden fall die lösung mit dem richtigen zeichensatz
 
Danke für die Antwort :)

Hab das jetzt aber nicht mit PHP umgesetzt, sondern mit Tcl. Tcl kann eigentlich mit Umlauten umgehen, aber beim senden pfuscht es da irgendwie rum. Hab das jetzt so gemacht dass vor dem senden a, ö und ü durch ae, oe und ue ersetzt werden.

Das funktioniert jetzt einwandfrei.

Da aber Tcl string replace nicht so optimal dafür ist, und ich auch keine andere Funktion dafür gefunden habe, hab ich mir die eben selbst geschrieben.

Falls also mal jemand in der selben Situation ist und das brauchen könnte:
Code:
proc replace { arg } {
  set arg [string tolower $arg]
  set arg [split $arg {}]

  set b ""

  foreach a $arg {
    if { [string equal $a "ä"] } {
      set a "ae"
    }
    if { [string equal $a "ö"] } {
      set a "oe"
    }
    if { [string equal $a "ü"] } {
      set a "ue"
    }
    set b "$b$a"
  }

  return $b
}
Ist wahrscheinlich nicht die optimalste Lösung, aber es funktioniert ;)
 
Zurück
Oben