[MySQL, PHP] Umlaute in der DB an UTF-8 anpassen

Hallo zusammen,

ich bin dabei eine Bücherdatenbank aufzubauen.
Nun lasse ich mir die Informatioenn über die Bücher bei amazon.de als XML ausgeben. Die Inhalt der XML-Datei kann ich auch schon in die DB einlesen lassen. Leider entstehen dann bei mir diese Zeichen:

ü, ö, ä, usw.

Ich weiß, dass alles UTF-8 sein muss. Die DB ist UTF-8 und auch die HTML Ausgabeseite ist UTF-8. Ich weiß auch, dass die XML-Seite leider ISO-8859-1 ist. Beim Einlesen in die DB entstehen nun diese falschen Zeichen - in der XML-Dateien stehen diese im Plaintext richtig als UTF-8.

Nun habe ich mir gedacht, dass ich ein PHP-Script machen könnte, das nach manuellem aufruf die Zeichen ersetzt (also in ä ,ö, ü, ß usw.).

Dazu habe ich schon mal den SQL-Befehl, der auch funktioniert:

UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ß‘, ‚ß‘) WHERE title LIKE ‚%ß%‘;
UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚´‘, ‚‘) WHERE title LIKE ‚%´%‘;
UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ä‘, ‚ä‘) WHERE title LIKE ‚%ä%‘;
UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ö‘, ‚ö‘) WHERE title LIKE ‚%ö%‘;
UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ü‘, ‚ü‘) WHERE title LIKE ‚%ü%‘;
UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚Ä‘, ‚Ä‘) WHERE title LIKE ‚%Ä%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ß‘, ‚ß‘) WHERE author LIKE ‚%ß%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚´‘, ‚‘) WHERE author LIKE ‚%´%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ä‘, ‚ä‘) WHERE author LIKE ‚%ä%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ö‘, ‚ö‘) WHERE author LIKE ‚%ö%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ü‘, ‚ü‘) WHERE author LIKE ‚%ü%‘;
UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚Ä‘, ‚Ä‘) WHERE author LIKE ‚%Ä%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ß‘, ‚ß‘) WHERE manufacturer LIKE ‚%ß%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚´‘, ‚‘) WHERE manufacturer LIKE ‚%´%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ä‘, ‚ä‘) WHERE manufacturer LIKE ‚%ä%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ö‘, ‚ö‘) WHERE manufacturer LIKE ‚%ö%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ü‘, ‚ü‘) WHERE manufacturer LIKE ‚%ü%‘;
UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚Ä‘, ‚Ä‘) WHERE manufacturer LIKE ‚%Ä%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ß‘, ‚ß‘) WHERE review LIKE ‚%ß%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚´‘, ‚‘) WHERE review LIKE ‚%´%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ä‘, ‚ä‘) WHERE review LIKE ‚%ä%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ö‘, ‚ö‘) WHERE review LIKE ‚%ö%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ü‘, ‚ü‘) WHERE review LIKE ‚%ü%‘;
UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚Ä‘, ‚Ä‘) WHERE review LIKE ‚%Ä%‘;

Da ich das nu in PHPmyAdmin ausführen kann, wollte ich es in eine PHP-Datei einarbeiten.

Mein Ansatz:

**mysql_connect(„localhost“, „root“, „“);
mysql_select_db(„db1“);

$befehl0 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ß‘, ‚ß‘) WHERE title LIKE ‚%ß%‘“;
$befehl1 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚´‘, ‚‘) WHERE title LIKE ‚%´%‘“;
$befehl2 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ä‘, ‚ä‘) WHERE title LIKE ‚%ä%‘“;
$befehl3 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ö‘, ‚ö‘) WHERE title LIKE ‚%ö%‘“;
$befehl4 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚ü‘, ‚ü‘) WHERE title LIKE ‚%ü%‘“;
$befehl5 = „UPDATE tx_ndlibrary_books SET title = REPLACE(title, ‚Ä‘, ‚Ä‘) WHERE title LIKE ‚%Ä%‘“;

$befehl6 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ß‘, ‚ß‘) WHERE author LIKE ‚%ß%‘“;
$befehl7 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚´‘, ‚‘) WHERE author LIKE ‚%´%‘“;
$befehl8 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ä‘, ‚ä‘) WHERE author LIKE ‚%ä%‘“;
$befehl9 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ö‘, ‚ö‘) WHERE author LIKE ‚%ö%‘“;
$befehl10 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ü‘, ‚ü‘) WHERE author LIKE ‚%ü%‘“;
$befehl11 = „UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚Ä‘, ‚Ä‘) WHERE author LIKE ‚%Ä%‘“;

$befehl12 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ß‘, ‚ß‘) WHERE manufacturer LIKE ‚%ß%‘“;
$befehl13 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚´‘, ‚‘) WHERE manufacturer LIKE ‚%´%‘“;
$befehl14 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ä‘, ‚ä‘) WHERE manufacturer LIKE ‚%ä%‘“;
$befehl15 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ö‘, ‚ö‘) WHERE manufacturer LIKE ‚%ö%‘“;
$befehl16 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚ü‘, ‚ü‘) WHERE manufacturer LIKE ‚%ü%‘“;
$befehl17 = „UPDATE tx_ndlibrary_books SET manufacturer = REPLACE(manufacturer, ‚Ä‘, ‚Ä‘) WHERE manufacturer LIKE ‚%Ä%‘“;

$befehl18 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ß‘, ‚ß‘) WHERE review LIKE ‚%ß%‘“;
$befehl19 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚´‘, ‚‘) WHERE review LIKE ‚%´%‘“;
$befehl20 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ä‘, ‚ä‘) WHERE review LIKE ‚%ä%‘“;
$befehl21 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ö‘, ‚ö‘) WHERE review LIKE ‚%ö%‘“;
$befehl22 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚ü‘, ‚ü‘) WHERE review LIKE ‚%ü%‘“;
$befehl23 = „UPDATE tx_ndlibrary_books SET review = REPLACE(review, ‚Ä‘, ‚Ä‘) WHERE review LIKE ‚%Ä%‘“;

$i = mysql_query($befehl0);
$i = mysql_query($befehl1);
$i = mysql_query($befehl2);
$i = mysql_query($befehl3);
$i = mysql_query($befehl4);
$i = mysql_query($befehl5);
$i = mysql_query($befehl6);
$i = mysql_query($befehl7);
$i = mysql_query($befehl8);
$i = mysql_query($befehl9);
$i = mysql_query($befehl10);
$i = mysql_query($befehl11);
$i = mysql_query($befehl12);
$i = mysql_query($befehl13);
$i = mysql_query($befehl14);
$i = mysql_query($befehl15);
$i = mysql_query($befehl16);
$i = mysql_query($befehl17);
$i = mysql_query($befehl18);
$i = mysql_query($befehl19);
$i = mysql_query($befehl20);
$i = mysql_query($befehl21);
$i = mysql_query($befehl22);
$i = mysql_query($befehl23);
mysql_error();**

Ich weiß, dass ich pro mysql_query() nur einen SQL-Befehl haben darf.
Ich habe aber mit UPDATE tx_ndlibrary_books SET author = REPLACE(author, ‚ß‘, ‚ß‘) WHERE author LIKE ‚%ß%‘ immer zwei, oder sehe ich das falsch?
Wie wird das richtig gemacht?

Desweiteren habe ich Hindernisse mit dem LIKE … : Die Zeichen werden wohl mit PHP nicht akzeptiert. Muss ich hier andere Zeichen nehmen?

Ich hoffe, ihr könnt mir weiterhelfen.

LG
Sandra

PS:
MySQL 5
PHP 5

Ich weiß, dass ich pro mysql_query() nur einen
SQL-Befehl haben darf.
Ich habe aber mit UPDATE tx_ndlibrary_books SET author =
REPLACE(author, ‚ß‘, ‚ß‘) WHERE author LIKE ‚%ß%‘
immer
zwei, oder sehe ich das falsch?

ist ein Befehl , wenn möglich noch mit semikolon abschliessen,
aber der BEFEHL ist Update , replace ist eine funktion :smile:

Wie wird das richtig gemacht?

Desweiteren habe ich Hindernisse mit dem LIKE … : Die
Zeichen werden wohl mit PHP nicht akzeptiert. Muss ich hier
andere Zeichen nehmen?

versuch mal
mysql_set_charset(„utf8“);

oder LIKE ‚%".utf8_encode(„Ä“)."%‘

Ich hoffe, ihr könnt mir weiterhelfen.

LG
Sandra

PS:
MySQL 5
PHP 5

ich würd deine ganzen UPDATES als prozedur anlegen
siehe
http://dev.mysql.com/doc/refman/5.1/de/stored-proced…

wenns denn nicht anders geht :smile:

braucht also kein PHP :smile:

Das ist die Lösung - vielen, vielen Dank.

LG
Sandra