Zum Inhalt springen

Sonderzeichen und exec_INSERTquery

Erstellt am 5. März 2009 · 6 Antworten · letzte Antwort am 9. März 2009

Tags: Frage

intensivstation ·

Ich habe ein selsames Problem.
Ich sende per xAjax Formular-Daten an eine eigene PHP-Funktion:

onclick="###PREFIX###doAdd(encodeURIComponent(document.gbentry.entry.value), encodeURIComponent(document.gbentry.vorname.value))"

und empfange sie so:

$markerArray["###VORNAME###"] 	= htmlspecialchars(urldecode($vorname));

Und gebe sie aus und schreibe sie in die DB.
Die Daten werden korrekt ausgegeben, landen aber falsch in der DB.
Lange habe ich experimentiert und erst als ich SET NAMES utf8 hinzugefügt habe:

$query = "SET NAMES utf8";
$queryResult = mysql( TYPO3_db, $query );
$insert = array('pid' => $thePID, USW);
$success = $GLOBALS['TYPO3_DB']->exec_INSERTquery($table, $insert);

kamen die Daten korrekt in der DB an.
Woran kann das liegen? Ich verwende bei dieser Homepage nirgendwo UTF-8 !!! Alles ist auf ISO gestellt!

intensivstation ·

Ja:

$this->xajax->setCharEncoding('ISO-8859-1');

wird in der main-Funktion gesetzt (nicht in der Aufruf-Funktion).
Es scheint ja eher nichts mit Ajax, sondern mit der DB zu tun zu haben.
Beim schreiben in die DB geht was schief, obwohl dort alles auf latin1_swedish_ci gestellt ist, klappts nur mit "SET NAMES utf8".
Ich verstehe das nicht.
Wenn es mit Ajax zu tun hätte, würden dann die Sonderzeichen nicht auch
im Browser falsch ausgegeben werden?

just2b ·

Ich hab das immer so gemacht

		$objResponse = new tx_xajax_response($GLOBALS['TSFE']->metaCharset);
		$objResponse->addAssign('infobox', 'innerHTML', $content);

		return $objResponse->getXML();

georg

intensivstation ·

OK, es muss wohl doch mit Ajax zu tun haben.
Anscheinend werden meine Formular-Inhalte in UTF-8 an die Zielfunktion gesendet.
Da ich dort kein Charset angegeben hatte, hatte die Zielfunktion die Fomularinhalte in UTF-8 ausgegeben, sodass mir nichts auffiel.
Aber hierdurch hat sich das geändert:

$objResponse = new tx_xajax_response($GLOBALS['TSFE']->metaCharset);

Das Problem ist also, dass die Formular-Inhalte offensichtlich UTF-8 kodiert gesendet werden. Demnach dürfte das hier in der main-Funktion nicht korrekt sein:

require_once (t3lib_extMgm::extPath('xajax') . 'class.tx_xajax.php');		// Include xaJax
$this->xajax = t3lib_div::makeInstance('tx_xajax'); // Make the instance
$this->xajax->setCharEncoding('ISO-8859-1');

Aber ich sehe da kein Fehler...

intensivstation ·

Ich denke ich weiss nun woran es liegt. Bei Apache steht das hier:
AddDefaultCharset utf-8
Das wird wahrscheinlich der Grund für die Probleme sein.