mysql ve kodlama

3 Cevap php

Ben yeni sunucuya benim php uygulama taşındı. i MySQL5 db kullanabilirsiniz. Ben db şey güncellenmesi veya takma olduğumda, her " ve - işareti ? olarak değiştirildi. Ben kullanmak SET NAMES UTF8 ve SET CHARACTER SET ama bu işe yaramaz. Herhangi bir fikir?

3 Cevap

Güncelleme veya eklerken hem de seçerken SET NAMES UTF8, her sayfada kullanılmalıdır.

Aslında bu sorgu veritabanına bağlanmak, her zaman kullanılmalıdır. sadece kod bağlanmak ekleyin.

Siz akıllı tırnak ve tire ("" -) yapmak için tüm yol boyunca UTF-8 yüklü ve diğer non-ASCII karakterleri güvenilir bir şekilde çalışabilir:

(1) tarayıcısı size UTF-8 kodlanmış karakterleri gönderir emin olun. UTF-8 olması formunu içeren sayfayı bildirerek bunu:

<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    ...

(IE sağ çalışmaz ki, {[) (0]} geçiyoruz.)

(2) ham bayt ile PHP fiyatları onlar konum ne kodlama umursamıyor, ama veritabanı bakımını yapar, böylece PHP bayt Bu içeri geliyor kodlayan anlatmamız gerekenleri {[(0) olduğunu mysql_set_charset tercih olabilir ama]}, yapıyor.

Uygun karakterler veritabanını ulaştığında (3), tüm karakterler sığabilecek emin olmak için bir Unicode kodlama bunları saklamak gerekir. Her sütun farklı bir kodlama olabilir, ama bunu UTF-8 kullanmak size CREATE table tüm metin sütunları yapmak için zaman DEFAULT CHARACTER SET utf8 kullanabilirsiniz. İsterseniz de utf8 için bir veritabanı veya tüm sunucu için varsayılan karakter seti olabilir.

Eğer CREATE tabloları d ve olmayan bir UTF-8 harmanlama zaten varsa, tabloları yeniden veya alter gerekecek. Sen kullanarak geçerli harmanlama kontrol edebilirsiniz SHOW FULL COLUMNS FROM sometable;.

(4) htmlspecialchars() kullanarak PHP emin HTML-kodlamak metin çıkış yapın ve değil htmlentities(), hangi varsayılan irade pisliği ASCII olmayan karakterler tarafından.

[You can, (2) ve (3), sadece bağlantı ve tablo depolama için varsayılan Latin-1 kodlamasını kullanabilirsiniz, ancak yine de onun içinde UTF-8 bayt koymak için bir alternatif olarak. Bu yaklaşımın dezavantajı veritabanına bakarak diğer araçlar yanlış bakacağız ve alt / üst harf karakterleri beklenen harf duyarsız bir şekilde birbirlerine karşı karşılaştırmak olmaz olmasıdır.]

Benim tahminim bir açılı oldukça alıntı içine " dönüştüren bazı metin editörü yapıştırarak, hem {olarak temsil edilmesi için neden bir mdash, içine - dönüştüren edilir [(2)]}.

Eğer UTF8 karakterleri kabul veritabanı ayarlamak ise, muhtemelen bu karakterleri kabul etmek webserver / PHP set vermedi. mbstring fonksiyonları ile oynamaya çalışın, ancak eğimli tırnak veya tire kullanarak öyle emin olmak için kontrol edin.