Problem mit UTF-8

Apache, Lighttpd, nginx, Cherokee
Post Reply
edvsb2
Posts: 7
Joined: 2006-04-28 19:48
 

Problem mit UTF-8

Post by edvsb2 »

Hallo zusammen,

habe ein dringendes Problem.

Ich mußte gerade den Server neu installieren lassen und habe nun das Problem dass alle Sonderzeichen als ? dargestellt werden.

DB ist auf UTF-8 umgestellt (Anhand des Tutorials hier im Forum). Dort stimmen die Daten auch noch.

Die Webseiten haben:
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Wird auch so vom Browser erkannt. Dennoch sind alle Sonderzeichen nur ? Fragezeichen.

Hat jemand einen schnellen Tip für mich was ich eventuell wo vergessen habe?

Danke und Gruß,

Ingo


Achja, die betroffene Webseite xxx

Edit: Bei ner neuen Testdatei stimmt es. Es sind also nur die Daten die aus der Datenbank kommen die nicht stimmen:
xxx
Last edited by edvsb2 on 2019-03-27 14:14, edited 2 times in total.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Problem mit UTF-8

Post by Roger Wilco »

Die Daten innerhalb deiner Datenbank wurden offenbar nicht oder nicht richtig konvertiert oder die Datenbank besitzt das falsche Charset.
edvsb2
Posts: 7
Joined: 2006-04-28 19:48
 

Re: Problem mit UTF-8

Post by edvsb2 »

Hi, ich hatte das Tutorial hier genommen und daraus eben nur die utf-8 Sachen

Code: Select all

[client]
character_set         = utf8
default-character-set = utf8
port                  = 3306
socket                = /var/run/mysqld/mysqld.sock

[mysql]
character-sets-dir    = utf8
default-character-set = utf8

[mysqladmin]
character-sets-dir    = utf8
default-character-set = utf8

[mysqlcheck]
character-sets-dir    = utf8
default-character-set = utf8

[mysqldump]
character-sets-dir    = utf8
default-character-set = utf8
max_allowed_packet    = 16M
quick

[mysqlimport]
character-sets-dir    = utf8
default-character-set = utf8

[mysqlshow]
character-sets-dir    = utf8
default-character-set = utf8

[myisamchk]
character-sets-dir    = utf8
key_buffer_size       = 32M
sort_buffer_size      = 32M
read_buffer_size      = 1M
write_buffer_size     = 1M

[isamchk]
character-sets-dir    = utf8
key_buffer_size       = 32M
sort_buffer_size      = 32M
read_buffer_size      = 1M
write_buffer_size     = 1M

[myisampack]
character-sets-dir    = utf8

[mysqld_safe]
err-log               = /var/log/mysql/mysql.err

[mysqld]
character-set-server  = utf8
default-character-set = utf8
user                  = mysql
port                  = 3306
bind-address          = 127.0.0.1
socket                = /var/run/mysqld/mysqld.sock
pid-file              = /var/run/mysqld/mysqld.pid
log-error             = /var/log/mysql/mysqld.err
basedir               = /usr
datadir               = /var/lib/mysql
tmpdir                = /tmp
language              = /usr/share/mysql/english
log-bin               = mysql-bin
server-id             = 1
sync_binlog           = 1
max_binlog_size       = 10M
expire_logs_days      = 7
skip-locking
skip-networking
skip-name-resolve
skip-external-locking
skip-show-database
safe-user-create      = 1
key_buffer_size       = 32M
sort_buffer_size      = 1M
join_buffer_size      = 1M
read_buffer_size      = 1M
read_rnd_buffer_size  = 2M
myisam_sort_buffer_size = 16M
max_allowed_packet    = 4M
thread_cache_size     = 2
table_cache           = 32
query_cache_type      = 1
query_cache_size      = 16M
query_cache_limit     = 1M
thread_concurrency    = 8
local-infile          = 0
long_query_time       = 4
log_slow_queries
log_long_format
myisam_recover
skip-innodb
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 4M
innodb_data_home_dir  = /var/lib/mysql/
innodb_log_arch_dir   = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend:max:128M
innodb_log_file_size  = 5M
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqlhotcopy]
interactive-timeout 
Der Dump war utf-8. Stehe wirklich auf dem Schlauch.

Danke schon mal
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen
 

Re: Problem mit UTF-8

Post by andreask2 »

Hallo!

Schreibe mal ein PHP-Skript, etwa wie folgendes (wichtig ist die Ausgabe der SQL-Abfrage):

Code: Select all

<?php

$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');

foreach($dbh->query("SHOW VARIABLES LIKE 'character_%'") as $row) {
    echo $row[0] . ": " . $row[1] . "n";
}

?>
Was gibt Dir das für Werte für

Code: Select all

character_set_client
character_set_results
character_set_connection
? Wenn Du MySL nicht selber mit "--with-charset=utf8" kompiliert hast, verwenden alle PHP-Extensions standardmäßig immer latin1, PHP kümmert sich nicht um my.cnf

(Bei Gentoo zwar dank einiger Patches inzwischen schon, ich rate aber dringend davon ab: http://svn.gnqs.org/projects/gentoo-php ... ticket/125)

Jedenfalls, wenn Du bei den genannten Variablen noch latin1 stehen hast, musst Du entweder SET NAMES... verwenden, oder entsprechende ext/mysqli charset Funktionen.

2 Links zum Thema:
http://dev.mysql.com/doc/refman/5.0/en/ ... ction.html
http://dev.mysql.com/tech-resources/art ... icode.html


Grüße
Andreas

PS: sendet der Server einen (passenden) Content-Type Header?
edvsb2
Posts: 7
Joined: 2006-04-28 19:48
 

Re: Problem mit UTF-8

Post by edvsb2 »

Hi,

die ganzen Character_Sets sind utf-8

Nein, ich habe nicht selbst kompiliert, aber komischerweise hat es ja zuvor auch funktionier. Also bis vor der Neuinstallation. Und da hatte ich das gleiche Tutorial von hier wie jetzt auch.

PHP ist auch auf UTF-8, genauso wie der Apache.

Aber es geht jetzt mit

Code: Select all

mysql_query("SET NAMES 'utf8'");
Zuvor hatte ich das aber irgendwie auf der Console gemacht und nicht im PHP-Script. Die Query jedes mal hatte ich mir gespart.

Danke noch mal,

Gruß, Ingo
andreask2
Posts: 696
Joined: 2004-01-27 14:16
Location: Aachen
 

Re: Problem mit UTF-8

Post by andreask2 »

Wenn Du MySQL nicht selber kompiliert hast (oder von Gentoo), dann verwendet die libmysql, auf der die PHP-Extensions basieren per default latin1. Wenn Du jetzt mit dem mysql client irgendwas testest, liest dieser die my.cnf, und verwendet so per default utf-8.

SET NAMES ändert die genannten charset-Einstellungen, somit funkioniert es dann auch mit PHP, wenn Du dieses Statement an den Anfang setzt.
Post Reply