Frage

Ich habe in den Datenbank-Wörter, die Sonderzeichen enthalten (in Spanisch meist, wie Tilden). In der Datenbank alles wird gespeichert und korrekt mit PHPmyAdmin gezeigt, aber wenn ich die Daten (mit PHP) erhalten und es in einem Browser angezeigt werden, erhalte ich einen seltsamen Charakter, wie ein „?“ mit einem quadratischen ... Ich brauche eine allgemeine Verlegenheit, damit ich jedes Zeichen nicht jedes Mal entkommen muß, und auch würde ich in der Lage spezielle Spanisch Zeichen aus einer PHP-Form in die Datenbank einfügen ...

Die HTML korrekt ist:

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Alle Tabellen und databas werden auf utf8_spanish

Der Charakter, den ich bekommen:

Alle Vorschläge ???

Danke !!!

War es hilfreich?

Lösung 4

Sie den HTML-Zeichensatz geändert ISO-8859-1 regelte das Problem! Dumme

Andere Tipps

Ich möchte nur einige weitere Details über die Lösung von vorgeschlagen hat vartec die (auf Ihrer MySQL-Installation abhängig) die korrekteste Lösung für Ihr Problem. Zunächst wird der Zeichensatz / Codierung Problem in MySQL ist ein etwas komplexes Thema, das ausführlich in der MySQL-Handbuch abgedeckt ist Kapitel 9.1 "Zeichensatz-Unterstützung" . In Ihrem Fall besonders 9.1.4. „Verbindungszeichensatz und Sortierungen“ wird relevanteste.

Um es kurz zu machen: MySQL muss wissen, welchen Zeichensatz / Kodierung der Client-Anwendung (aus der Datenbank sprechen persoective das ist Ihre PHP-Skript) erwartet wird, da es all String-Daten aus der internen Zeichensatz / Codierung umcodieren werden definiert, bei Server-, Datenbank-, Tabellen- oder Spaltenebene in den Verbindungszeichensatz / Codierung. Sie verwenden UTF-8 auf der Client-Seite muss MySQL so sagen, dass Sie UTF-8 verwenden. Dies wird durch den MySQL-Befehl SET NAMES 'utf8' durchgeführt, die beim Öffnen einer Verbindung als die erste Abfrage gesendet werden müssen. Abhängig von Ihrer Installation und auf der MySQL-Client-Bibliothek, die Sie in dem PHP-Skript verwenden, um dies automatisch erfolgen kann jede Verbindung.

Wenn Sie PDO verwenden, es ist nur eine Frage der einen Konfigurationsparameter einstellen

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Mit Mysqli der Client-Zeichensatz / Codierung zu ändern ist noch einfacher:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Ich hoffe, das wird helfen, das Ganze verständlicher zu machen.

Ausgabe SET NAMES 'utf8' direkt nach dem Anschließen:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");

Haben Sie MySQL automatisch übersetzen

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);

http://es.php.net/manual/ en / function.mysql-set-charset.php

EDIT: von Ihrem Kommentar entnehme ich, dass dies tatsächlich in latin1 codiert wird, so

mysql_set_charset('latin1_spanish_ci',$conn);

Ich fand das von irgendwo, und seitdem es als Ganzes habe mit, ohne zu viel zu denken.

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");

holy crap .. Dies machte mich verrückt. ich habe versucht, das Gleiche zu tun. Ich habe eine utf-8-Codierung HTML-Header .. mysqli_set_charset () hat mich gerettet, Stunden später, aber ich bin froh, dass ich habe es funktioniert jetzt

eine andere Funktion für die Codierung von Sonderzeichen und Akzente zu versuchen, ist htmlentities ()

Sie können einfach tun:

$link = mysql_connect("host", "user", "password");
mysql_select_db("database", $link); mysql_query("SET NAMES 'utf8';", $link);

Schalten Sie Unicode-Codierung in Ihrem HTML.

Wenn mit Sonderzeichen zu tun Ich nehme immer Pflege der folgenden Optionen:

  • Datenbank-, Tabellen- und Feldzeichensätze ganz eingestellt werden * oder utf8_unicode utf8_general_ _ *
  • Ich stelle sicher, mein Editor speichert PHP-Dateien mit dem richtigen Zeichensatz
  • Ich habe default_charset in php.ini auf UTF-8 oder
  • Ich sende einen Content-Type: text / html; charset = UTF-8-Header
  • Die charset im META-Tag ist UTF-8 (dies durch die Content-Type HTTP-Header außer Kraft gesetzt wird)
  • Wenn ein MySQL-Verbindung I die folgenden Abfragen ausgeben:
    • SET NAMES utf8
    • SET CHARACTER SET utf8
    • SET collation_connection = "utf8_general_ci" / "utf8_general_ci"

Sind Sie sicher, dass Sie UTF8-Daten in Ihrer Datenbank zu beginnen?

Die Antwort, die für mich gearbeitet ist derjenige, der Stefan Gehrig geschrieben:

  

$ mysqli-> set_charset ( "UTF-8");

Ich brauche nur diese Zeile hinzufügen, nachdem die Verbindung und meine Probleme mit definierten wo gelöst! :)

(ich bin Entsendung eine Antwort, da kann ich nicht sagen ...).

meine Lösung ist: alles tun, die oben dargebotener aber auch im mit Notepad ++ arbeiten und die Datei muss gespeichert werden, wie folgt aus: der Codierung in der manu Registerkarte gehen und speichern Sie die Datei -> kodieren in UTF-8

interestedly, hat dieser Code nicht für mich arbeiten:

$link = mysqli_connect('localhost', 'my_user', 'my_password', 'test');
mysqli_set_charset($link, "utf8");
printf("Current character set: %s\n", mysqli_character_set_name($link));
//shows latin1

Allerdings in einem Zustand der charset Einstellung funktioniert:

if (!mysqli_set_charset($link, "utf8")) {
    printf("Error loading character set utf8: %s\n", mysqli_error($link));
    exit();
} else {
    printf("Current character set: %s\n", mysqli_character_set_name($link));
    //shows utf8
}

Mein Setup:

$ rpm -qa|grep -E "php|maria"
mariadb-5.5.56-2.el7.x86_64
mariadb-server-5.5.56-2.el7.x86_64
mariadb-libs-5.5.56-2.el7.x86_64
php-pdo-5.4.16-45.el7.x86_64
php-cli-5.4.16-45.el7.x86_64
php-5.4.16-45.el7.x86_64
php-common-5.4.16-45.el7.x86_64
php-mysql-5.4.16-45.el7.x86_64
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top