Karakter Kodlama Sorunu

5 Cevap php

I (mysql) veritabanı üzerine bu tasarruf ve geri göstermek gerekir. (Benim veritabanı utf_general_ci olduğu)

I αм iиvisibłє łiкє αiя--- I αм αs iмρøяŧαиŧ αs øxygєи--- I αм łiviиg iи ŧЋє wøяłd øƒ мy dяєαмz I αм αłwαys ŧЋєяє ŧø Ћєłρ øŧЋєяz--- I αм busy buŧ иєvєя igиøяє αиy øиє I αм ŧЋє øиє wЋø cαяєz--- I łøvє ŧø sєє øŧЋєя łαugЋiиg I αм ŧЋє øиє wЋø bøяяøw øŧЋєяz søяяøw I αм ŧЋє øиє wЋøz иαugЋŧy buŧ иicє I αм łøsŧ iи мy ŧЋøugЋŧs--- I łøvє ŧø ŧαłк--- I łøvє ŧø sЋαяє--- I αм яєαdy ŧø gø αиy wЋєяє--- I łøvє ŧø ƒły buŧ døи’ŧ Ћαvє wiиgs— I wαиŧ ŧøø ŧøucЋ ŧЋє sкy łiмiŧs--- I αм єvił buŧ иøŧ dєvił--- I иєvєя ƒøłłøw αиy ŧяєиd--- I αм ƒuиłøviиg--- suм ŧiмє łøvє ŧø bє αłøиє--- I łøvє ŧø łivє---

Ancak veriler kaydedilir ve alınan edilirken, bu ne olsun

��Ã�±LL à ¸£Ã��Ã��Ã��Ã��à ¸£â�¥â�� â�ï&iqu

Herhangi bir yardım lütfen? Bu işleyebilir veritabanı veya bazı PHP fonksiyonları harmanlama değiştirmek için bir şey mi?

5 Cevap

Eğer sunucu UTF-8 karakter kümesini kullanarak geri sonuçları gönderir sağlamak için 'SET İSİMLERİ utf8' kullanmanız gerekir. Örnek:

$dbconn = mysql_connect("localhost", "user", "pass") or die(mysql_error());
           mysql_select_db('database', $dbconn) or die(mysql_error());
           mysql_query("SET NAMES 'utf8'");

Ben başlıklı Joel'ın makalesinde doğru bir işaret olmalı The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!). Bu makalede kullanılan konum neden, karakter kodlamaları ne olduğunu açıklar ve onları yönetmek için nasıl.

Sizin veri açıkça geniş bir Unicode karakter bir sürü içerir, böylece PHP ve MySQL hem (Yapılandırmanızda) karakter kodlamaları işlemek ve hangi fonksiyonları kodlamaları doğru olarak tercüme emin olun çağrısı hakkında öğrenmek zorunda kalacaklar Doğru zamanı. Eğer yapıştırılan örnek (yanlış) veri kodlama uyuşmazlığı yerde kesinlikle var olduğunu gösterir.

Aşağıdaki adımları deneyin:

  1. Tüm DB alanları UTF-8 veri depolamak için ayarlanmış olduğundan emin olun (utf8_general_ci).
  2. DB bağlantı üzerine aşağıdaki sorguyu yürütün: SET NAMES 'utf8';
  3. Sadece seçin, UTF-8 without BOM, there is a nice free text editor for Windows O kolayca (durum çubuğunda) dosya kodlamasını değiştirmek için izin verecek gibi. Php dosyayı kaydedin UTF-8 Plain.

Yani kullanıcı veri alıyorsanız, ancak (GET, POST veya COOKIE argümanlar) bazı additional steps described in this answer takip etmek isteyebilirsiniz, çalışması gerekir.

Ayrıca, aşağıdaki meta etiketi ile ilgili:

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

Veya eşdeğer PHP başlık:

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

Bunu kullanmak zarar vermez rağmen, elbette, depolama sürecine müdahale etmez sadece display UTF-8 veri için bu gerekir. =)

MySQL mysql_query("SET NAMES 'utf8'"); veri aktarımı için çalıştırın ve sonra da sayfaların her biri bir UTF-8 başlığı gönderir emin olun emin olun.

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

Ayrıca, Am I correctly Supporting UTF-8 bütün her şeyi kontrol ve çalıştığından emin olmak için bunun üzerinden bazı other test data çalıştırmak çift okundu. Ve can test for UTF-8 her sayfa yük.

Son tarayıcı Chrome gibi yeni bazılarını otomatik olarak bazı charsets kullanmayın çünkü yüklü kullanmak istediğiniz charset sahip olduğundan emin olun. Ancak, hepsi UTF-8 yani bu başlık göndermek emin olunuz!

Sorunları kodlama olmadan özel karakter kullanmak için bu 4 kuralları takip etmeye çalışıyorum:

  1. utf8_general_ci harmanlama ile db alanları oluşturmak
  2. ("İsimler 'utf8' SET;") sorgu mysql_query yapmak; herhangi bir bağlantı sonra (Mysql 5 gerekir)
  3. html kafa bloğunda meta charset utf8 etiket koymak
  4. okuma ve db dizeleri yazmak ve utf8_encode veya diğer fonksiyonları kullanmadan html

Bu metin here geliyor.