PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Umlaute (http://www.selfphp.de/forum/showthread.php?t=24486)

Riegelhaus 19.11.2011 14:40:42

Umlaute
 
Hallo

Vor 2 Jahren hatte ich Umlautproblene beim Excel-Export. Jetzt im PHP/MySql und die damaligen Tipps helfen nicht weiter.

Ich habe Daten auf dem internen Server und welche extern im Internet. Die Umlaute auf dem internen Server kommen, die externen nicht. Die Ausgabe ist auf derselben Seite, und doch so unterschiedlich. Habe verschiedene Versionen ausgetestet, nichts bringt was. Immer sind die Umlaute von der internen DB gut und die vom externen Server nicht. In der DB sind an beiden Orten die Umlaute uncodiert erfasst, also öäü

Wie kann ich die Umlaute vom externen Server richtig anzeigen?


PHP-Code:

$link mysql_connect("localhost","user","pw");
mysql_select_db("db",$link);

$link_extern mysql_connect("t.mysql.db.xxx.yyy","user","pw");
mysql_select_db("db",$link_extern);


$query "SELECT name FROM sheet
where name LIKE '$a'
order by name"
;
$result mysql_query($query,$link);
$num mysql_num_rows($result);
for (
$i 0$i $num$i++)

$row mysql_fetch_array($result);
echo
"$row[name]";
}


$query_extern "SELECT Name FROM sheetextern
where Name LIKE '$a'
order by Name"
;

$result_extern mysql_query($query_extern,$link_extern);
$num_extern mysql_num_rows($result_extern);
for (
$i 0$i $num_extern$i++)

$row_extern mysql_fetch_array($result_extern);
addslashes($Name1 $row_extern['Name']); echo"$Name1"
utf8_encode($Name2 $row_extern['Name']); echo"$Name2"
$Name3=htmlspecialchars(utf8_encode($row_extern['Name'])); echo"$Name3"
utf8_decode($Name4 $row_extern['Name']); echo"$Name4";



Habe auch die DB angeschaut mit SHOW VARIABLES LIKE 'character_set%' und die sind auf utf8 gesetzt.

Code:

character_set_client        utf8
character_set_connection        utf8
character_set_database        utf8
character_set_filesystem        binary
character_set_results        utf8
character_set_server        utf8
character_set_system        utf8
character_sets_dir        /usr/local/share/mysql/charsets/

character_set_client        utf8
character_set_connection        utf8
character_set_database        latin1
character_set_filesystem        binary
character_set_results        utf8
character_set_server        latin1
character_set_system        utf8
character_sets_dir        D:\xampp\mysql\share\charsets\


und der Header im HTML

Code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>...</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


DokuLeseHemmung 19.11.2011 15:04:22

AW: Umlaute
 
Zitat:

PHP-Code:

addslashes($Name1 $row_extern['Name']); ...
utf8_encode($Name2 $row_extern['Name']); ...
...  
utf8_decode($Name4 $row_extern['Name']); 


Was soll denn der Unsinn bewirken?

Und warum eine for und keine while Schleife?

Zitat:

Habe auch die DB angeschaut mit SHOW VARIABLES LIKE 'character_set%' und die sind auf utf8 gesetzt.
Mit phpmyadmin, oder aus dem Script heraus ?

Zitat:

HTML-Code:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


Beides?
Hääää...
Auch den richtigen HTTP Header gesendet?

Riegelhaus 19.11.2011 22:34:14

AW: Umlaute
 
Ja habe alles so gepostet wie ich es habe, inkl. den unterschiedlichen Tests.

Wenn ich im Header schreibe:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

dann sind die Umlaute der internen DB nicht richtig, die externen schon

Bei
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

sind die internen Umlaute gut, die externen nicht.

Wenn ich die externe DB jedoch über das Internet anschaue, also auch extern kommt die Umlaute richtig.

Vielelciht liegt es doch am Header.

Code:

<?php  session_start();
require_once("../lib/header.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="shortcut icon" type="image/x-icon" href="../incl/favico.ico" />
<title>Titel</title>
<link href="../lib/style_admin.css" rel="stylesheet" type="text/css" />
<link href="../incl/SpryTabbedPanels.css" rel="stylesheet" type="text/css" />
</head>


DokuLeseHemmung 20.11.2011 08:16:11

AW: Umlaute
 
Warum hast du die Frage zum Verbindungscharset nicht beantwortet?

Riegelhaus 21.11.2011 21:34:23

AW: Umlaute
 
Vermutlich weil ich sie nicht verstanden habe, sorry

Sehe nun klarer aber bin nicht weiter!


Mit dem Header
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
kommt die externe DB richtig

Mit
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
die interne


Jetzt möchte ich die interne DB so umstellen dass alles auf utf8 ist.

Habe im phpMyAdmin im SQL-Feld SHOW VARIABLES LIKE 'character_set%' gemacht und folgendes erhalten:

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir D:\xampp\mysql\share\charsets\

Kann es daran liegen dass character_set_server latin1 steht?

Ich möchte nun, dass alles mit utf8 erkennbar ist. die externe DB geht dann und intern sollte ich es umstellen. Doch mit allem anpassen und umkopieren geht es nicht.

PS: gerne würde ich die Verbindungscharset beantworten, doch ich weiss nicht wo ich das finde

Danke

knight1 21.11.2011 21:40:27

AW: Umlaute
 
Zitat:

Zitat von Riegelhaus (Beitrag 142474)
...
PS: gerne würde ich die Verbindungscharset beantworten, doch ich weiss nicht wo ich das finde
...

Was bedeutet "Verbindung" denn auf Englisch?
Denk' mal nach.

Kai aka Knight1

Riegelhaus 21.11.2011 22:26:24

AW: Umlaute
 
ist es das

SHOW VARIABLES LIKE 'collation%';

collation_connection utf8_bin
collation_database utf8_general_ci
collation_server latin1_swedish_ci


Wie kann ich den collation_server latin1_swedish_ci auf UTF8 anpassen? da liegt doch das Problem, oder?

Riegelhaus 21.11.2011 23:08:14

AW: Umlaute
 
Habe mal eine neue DB erfasst

create database adresskartei character set latin1 collate latin_german1_ci

und dann SHOW VARIABLES LIKE 'collation%'

Und der Schwede ist immer noch drin

collation_connection utf8_general_ci
collation_database latin1_german1_ci
collation_server latin1_swedish_ci


oder;

create database adresskartei2 character set utf8 collate utf8_general_ci

collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server latin1_swedish_ci


Was muss es heissen? Und der Schwede????

Riegelhaus 22.11.2011 00:08:44

AW: Umlaute
 
Die extrerne DB die richtig ist hat folgende Einstllungen

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/local/share/mysql/charsets/


collation_connection utf8_general_ci
collation_database utf8_unicode_ci
collation_server utf8_unicode_ci


Eben: ohne Schwede!

DokuLeseHemmung 22.11.2011 07:47:27

AW: Umlaute
 
Zitat:

Habe im phpMyAdmin im SQL-Feld SHOW VARIABLES LIKE 'character_set%' gemacht und folgendes erhalten:
Genau, das habe ich mir gedacht!
Der Test mit phpMyAdmin hilft wenig weiter denn phpMyAdmin setzt seinen eigenen Verbindungscharset.

Du musst ihn selber im PHP setzen.
Dafür gibts eine spezielle MySQL_**** Funktion.
Nutze sie.

Und welchen Charset der Server hat ist dabei egal.
character_set_server latin1 ist egal

Und auch die Collation ist erstmal für das Problem egal. Denn das betrifft nur Vergleiche und das Sortieren


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

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.