Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Problem mit Sonderzeichen und Umlaute (auch in DB) [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Sonderzeichen und Umlaute (auch in DB)


 
Seikilos
10-07-2005, 19:47 
 
Also, man gibt per Formular, welches in utf-8 ausgegeben wird einen String ein.
Testweise ist die Eingabe immer falsch, ziel ist die Eingabe wieder richtig auszugeben.
Ich gebe also als erstes "Agbar" , mit den Anführungszeichen, wie erwartet wird bei der Neuausgabe nur ein / angezeigt, weil das " escaped wurde.
Das Problem wurde gelöst, in dem ich htmlentities() über die Ausgabe fahren lasse, beim Neuausgeben steht wieder korrekt "Agbar", das Problem ist gelöst, aber es geht weiter, gebe ich nun Fjörd ein und gebe es aus, wird das ö durch htmlentities völlig zerstört, es steht dann sowas wie Fjörd" da, ergo Umlaute und §,$,ß werden dadurch unlesbar, Wie kann ich das Problem lösen? Relevant ist es, dass es in die Datenbank schreiben will, welche im momet Problemlos unkonvertierte " und Umlaute annimmt, die " werden durch \" ersetzt, die Umlaute bleiben drin, jedoch habe ich ein weiteres Problem mit den \" in der DB, unter bestimmten Vorraussetzungen muss ich eine Kategorie umbennen, sie wird dann neu einsortiert, ist nicht vermeidbar, nun gibt es ein Problem,
im Prozess wird intern der neue mit altem Namen verglichen, es wird verstgestellt, wohin der Name verschoben wird.
Beispiel "Meer" wird umbennant in "Zoo", ich gucke also ob Zoo größer als Meer ist, ist es, alles klar(Script weiß was zu tun ist), ergibt Meer<Zoo false weil man vielleicht anstatt "Zoo" "Badesee" eingegeben hat, prüft man ob Meer>Badesee ist, ergibt das true, weiß das Script, was es tut, ergibt das false, so weiß man, der neue und der alte Name und der neue Name auf der gleichen Position verbleiben, es funktioniert auch so, aber das Problem mit "Agbar" (also mit ") ist dass aus irgend einem unempfindlichen Grunde "Agbar"> "Agbar" false ist, jedoch "Agbar"<"Agbar" true ergibt und mein Script geht von der falschen Annahme aus, dass der selbe String kleiner als er selbst ist.
(Das ist ein Szenario wo ich die Kategorie nicht umbennen, nur andere Felder)

Wie kriegt denn dieses Forum es hin, dass man nach Umlauten suchen kann und alles andere richtig ausgegeben wird, denn ich will meine DB nicht voller urlde und encodes vollgestopft haben.

Man kann davon ausegehen, dass ich gesucht habe, also bitte kein verweis auf Suchfunktion, damit hab ich die letzten Stunden verbracht.

 
penizillin
10-07-2005, 19:54 
 
das mit dem suchen bzw. vergleichen habe ich gar nicht verstanden.
das erste problem lässt sich evtl. durch explizite kodierungsangabe lösen: $text = htmlentities($text, ENT_QUOTES, 'UTF-8');

 
Seikilos
10-07-2005, 20:39 
 
Danke, das erste Problem wurde gelöst, für das zweite empfehle ich, wer lust hat, folgendes:


CREATE TABLE `test` (
`t` tinytext NOT NULL
) TYPE=MyISAM;

--
-- Daten für Tabelle `test`
--

INSERT INTO `test` VALUES ('\\"Abar"\\');

und führe mal das aus

SELECT * FROM `test` WHERE t>'\"Abar\"'
Warum wird hier ein Ergebnis ausgegeben, obwohl t nicht < \"Abar\" ist

Oder sollte man stripslashes ausführen und in die DB keine escapte Anführungszeichen reinschreiben?


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:25 Uhr.