Düzgün PHP / MySQL / Apache uluslararası karakteri nasıl işleneceğini

5 Cevap php

Düzenleme alanları, statik HTML, veritabanı - Ben her yerde her Unicode karakterleri işleyebilir PHP bir uygulama oluşturmanız gerekir. Biri bana bu hedefe ulaşmak için kullanılan / ayarlanması gereken tüm parametreler / fonksiyonların tam listesini söyleyebilir misiniz?

5 Cevap

Apache

Sunucu kodlama ya ayarlamak, ya da UTF-8 ayarlı değil olmalıdır. Bu apache AddDefaultCharset yönergesi ile yapılır. Bu bir sanal ya da genel bir dosya (belgelerine bakın) gidebilirsiniz.

AddDefaultCharset utf-8

MySql

  • UTF-8 olması veritabanı harmanlama ayarlayın
  • Bağlantı kodlama ayarlayabilirsiniz. Birisi mysqli_set_charset ile, ya da sadece bağladıktan sonra bu göndererek dediği gibi yapılabilir:
    SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'

PHP

1 - Sen sayfada, ya da bir PHP başlığı üzerinden bir meta etiketi aracılığıyla, UTF-8 olması sayfanın HTML charset ayarlamanız gerekir:

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-or-
    header('Content-type: text/html; charset=utf-8');

2 - Her zaman mb * dize ile ilgili işlevlerin sürümü, örneğin, mbstrlen yerine bir dize dize uzunluğunu almak strlen kullanmalısınız.

Bu sayfalardan veri, her yerde UTF-8 için izin vermelidir. Bir Yapabileceğiniz testi: her yerde firefox kullanıyorsanız sayfada sağ tıklayın ve göster seçeneğini sayfası bilgisi. Etkili kodlama bu sayfada listelenmiştir.

Önemli: Ayrıca PHP Mysql bağlanırken bağlantı charset UTF-8 kullanmak emin olmalıdır!

Mysqli'nin için bu yapılır

mysqli_set_charset($dblink, 'utf-8')

http://de3.php.net/manual/en/mysqli.set-charset.php

Eğer içine bakmak gerekir bazı şeyler: -

PHP

İçerik utf-8 olarak işaretli olduğundan emin olun:

default_charset = "utf-8"

Mbstring yükleyin. Bunu here bulabilirsiniz

Ensure that you are talking utf-8 between PHP and MySQL.
Call mysql_set_charset("utf8"); (or use the SQL query SET NAMES utf8)

Apache

Ayrıca böyle bir şey ile Content-Type: Burada sayfalarınızın seti

AddDefaultCharset utf-8

MySQL

Tüm masalar utf8 Harmanlama utf8_general_ci kullandığınızdan emin olun; örneğin

ALTER DATABASE mydb CHARACTER SET utf8;

Finally

Nihayet, eğlenceli unicode örnekleri ile testi şeyler, like these ones

٩(͡๏̯͡๏)۶

Daha fazla yararlı bilgiler when I tried this ...

Sen utf-8 için sayfalarınızda charset ayarlamak için bir HTTP üstbilgisi veya bir meta öğesi ya da kullanmak için tavsiye edildi. W3C her ikisini de yapmak önerir. Ve meta öğesi sayfada mümkün olduğunca erken görünmelidir. (Meta öğesi önce tüm karakterler hemen hemen tüm karakter kodlamaları temelde aynı olan, ASCII olmalıdır. Erken sahip olmak iyi bir neden olur meta etiketi, karşılaşma Bazı tarayıcılar sayfa işlemeyi yeniden başlayacaktır.)

Ayrıca, kullanıcı girişi kabul eden tüm formları bir accept-charset="utf-8" niteliğini koydu. Genellikle POST verilerini göndererek sayfanın kodlama varsayılan tarayıcıları, ama emin olmak için bir zarar.

Ben bahsedilen yöntemler kullanılmış ve onlar iyi çalıştı. Yakın zamana kadar, benim sağlayıcı 5.0.81-5.2.11 topluma ve MySQL PHP güncellendi zaman. Bu değişiklikten sonra unicode karakterler düzgün veritabanından alınan, ancak tüm güncelleştirmeler bozuk ve unicode karakterleri ile '? Yerini ediliyordu.

Çözelti kullanımı idi:

mysql_set_charset('utf8',$conn);

Biz kullanılan olsa da gerekli oldu:

SET NAMES utf8
SET CHARACTER SET utf8

Ayrıca - biz adodb kullanmış beri sonra PHP bağlantı tanıtıcısı bulmak gerekiyordu. Biz şu ifadeyi kullandı:

mysql_set_charset('utf8',$adoConn->_connectionID);