PHP / MySQL Özel karakterler

10 Cevap php

I have in the database words that include special character (in Spanish mostly, like tildes). In the database everything is saved and shown correctly with PHPmyAdmin, but when I get the data (using PHP) and display it in a browser, I get a weird character, like a "?" with a square... I need a general fix so I don't need to escape each character every time, and also I would be able to insert special Spanish characters from a PHP form into the database...

HTML doğrudur:

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

Tüm tablolar ve databas utf8_spanish ayarlanır

Ben olsun karakteri:

Herhangi bir öneriniz??

Teşekkürler!

10 Cevap

Sorun sabit ISO-8859-1 HTML charset değişti! Saçma

I'd just like to provide some more details on the solution proposed by vartec which is (depending on your MySQL installation) the most correct solution to your problem. First of all the character set / encoding issue in MySQL is a somewhat complex subject which is extensively covered in the MySQL manual Chapter 9.1 "Character Set Support". In your case especially 9.1.4. "Connection Character Sets and Collations" will be most relevant.

Kısa yapmak için: MySQL bu set / kodlama tanımlanan iç karakteri tüm dize verileri dönüştürmek olacak gibi (ki PHP script persoective veritabanından konuşuyor) istemci uygulaması bekliyor hangi karakter seti / kodlama bilmeniz gerekir sunucusu-, veritabanı, tablo veya bağlantı karakter seti / kodlama içine sütun düzeyinde. Sen istemci tarafında UTF-8 kullanıyor yani UTF-8 kullanmak MySQL söylemeliyim. Bu bir bağlantı açmak ile ilgili ilk sorgu olarak gönderilmesi gerekir SET NAMES 'utf8' MySQL komutu ile yapılır. Yüklemesini ve PHP script kullanmak MySQL istemci kütüphanesi bağlı olarak bu her bağlamak otomatik yapılabilir.

Eğer PDO kullanırsanız, sadece bir yapılandırma parametresi ayarı meselesi

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

Istemci karakter kümesi / kodlaması değişen mysqli kullanımı daha basittir:

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

Ben her şey daha anlaşılır hale getirmek için yardımcı olacağını umuyoruz.

Bağladıktan sonra Sayı SET NAMES 'utf8' Doğru:

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

MySQL otomatik olarak tercüme ettiniz

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

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

EDIT: Yorumlarınız dan ben bu aslında öyle latin1 kodlanmış olduğunu, toplamak

mysql_set_charset('latin1_spanish_ci',$conn);

Muhtemelen doğru içerik türü başlığı ayarlamak gerekir:

header('Content-type: text/html; charset=utf-8');

Bu question de yardımcı olabilir.

holy crap.. this was driving me insane. i was trying to do the same thing. i added a utf-8 encoding HTML header.. mysqli_set_charset() saved me, hours later, but I am glad I have it working now

özel karakter ve aksan kodlama için denemek için başka bir işlevi olduğunu htmlentities ()

HTML'nizdeki unicode kodlama açın.

Özel karakterler ile uğraşırken ben hep aşağıdaki dikkat:

  • Veritabanı, tablo ve alan karakter setleri tüm * veya utf8_unicode_ utf8_general_ ayarlanır
  • Ben editör doğru karakter kümesi ile PHP dosyalarını kaydeder emin olun
  • UTF-8 or php.ini dosyasından default_charset ayarlanır
  • Text / html;: Ben bir Content-Type gönderin charset = UTF-8 başlık
  • META etiketi charset (bu Content-Type HTTP başlığının ile değiştirileceğini) UTF-8
  • When connecting to MySQL I issue the following queries:
    • SET İSİMLERİ utf8
    • SET KARAKTER SETİ utf8
    • SET collation_connection = "utf8_general_ci" / "utf8_general_ci"

Eğer başlamak için veritabanı UTF8 veri var emin misiniz?

Ben bir yerden buldum ve o zamandan beri çok fazla düşünmeden bütün olarak kullanıyoruz.

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