WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Problem med XML (https://www.wn.se/forum/showthread.php?t=15657)

nosnaj 2006-08-17 10:41

Suttit och blivit galen över problem med åäö. Provat med båda latin-1 samt utf-8 på databas men problemet är när man hämtar datan och ska pilla in i DOMDocuemnt. Den gillar inte alls åäö utan klagar.

Det fungerar dock om man kör utf8_enocde på datan innan man stoppar in den i DomDocumentet. Varför fungerar detta och inte när man har utf-8 överallt annars?
Känns väldigt obra sitta anropa utf8_enode överallt där man har text.

Följande testkod körs:

Kod:

<?php
$mysql_server = 'localhost';
$mysql_user = '';
$mysql_password = '';
$mysql_database = '';
$conn = @mysql_connect($mysql_server, $mysql_user, $mysql_password);
@mysql_select_db($mysql_database, $conn);

if(isset($_GET['data'])) {

        $sql = 'INSERT INTO test(test) VALUES (\''.$_GET['data'].'\');';
        $result = mysql_query($sql);
}
        $sql = 'SELECT * FROM test;';
        $result = mysql_query($sql);

        $dom = new DOMDocument('1.0', 'iso-8859-1');
        $node = $dom->createElement('test');
        $dom->appendChild($node);

        while($row = mysql_fetch_array($result)) {
 $tmp = $dom->createElement('tmp', $row['test']);
 $node->appendChild($tmp);
        }
        header('Content-type: text/xml');
        echo $dom->saveXML();
?>


Humankapitalisten 2006-08-17 13:32

DOMdocuments textmetoder förväntar sig 'utf-8' som inparameter. Alltså måste du alltid se till att det du skickar in är i 'utf-8'.

Det låter inte som du lyckats få till
Citat:

utf-8 överallt annars
. Hur gjorde du när du satte om databasen till 'utf-8'?

Prova att ändra mysql teckenuppsättning med nedanstående innan du skickar din SELECT, då borde du få 'utf-8' tillbaka.

mysql_query('SET character_set_results=utf8;');
mysql_query('SET character_set_client=utf8;');
mysql_query('SET character_set_connection=utf8;');

Ett annat tips;
Använd "mysql_real_escape_string($_GET['data'])", så slipper du problem om GET-variabeln innehåller t.ex. "Anders 'Bullen' Olsson"

nosnaj 2006-08-17 13:50

Fungerade perfekt!
Vilka filer ska man ändra så man får det fungera så man slipper köra dessa tre SQL-satser för varje mysql-anslutning?. Har sparat dessa inställningar i /etc/mysql/my.cnf men det funkar dock inte. Några idéer?

Sql injections känner jag till, det var bara en test och orkade inte skriva de extra tecknena.

Humankapitalisten 2006-08-17 14:34

Jag vet inte säkert och har ingen burk att proba på där jag sitter just nu, men testa

[mysql]
default-character-set=utf8

kan gå...


Alla tider är GMT +2. Klockan är nu 15:17.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson