PHP UTF-8 soru - PHP bir dize oluşturursanız ...

3 Cevap php

PHP, böyle bir dize oluşturmak ise:

$str = "bla bla here is my string";

Sonra UTF8 olarak bu dize çalışmasına mbstring işlevleri kullanmak mümkün olacak?

// Will this work?
$str = mb_strlen($str); 

Ben o zaman know UTF-8 başka bir dize (bir POSTed formu değer ya da bir veritabanından bir UTF-8 dizesi söylemek) varsa Dahası, ben o var bu ikisini birleştirmek ve olamaz herhangi bir sorun?

// What about this, will this work? 
$str = $str . $utf8_string_from_database;

3 Cevap

First question: it depends on what exactly goes in the string.

PHP (zaten PHP5, kadar), dizeleri bayt sadece dizileri vardır. Onlarla ilgili hiçbir zımni veya açık karakter kümesi vardır; Bu programcı izlemek gerekir şey. (Dosyanın kendisi UTF-8 olarak kodlanmış ise oldukça kolay) sadece tırnak arasında geçerli UTF-8 bayt koyarsanız Yani, o dize UTF-8 olacak ve güvenle üzerinde () strlen kullanabilirsiniz.

Eğer mbstring fonksiyonlarını kullanarak eğer Ayrıca, size açıkça dize mbstring.internal_encoding ile veya herhangi bir mbstring işlevine son argüman olarak da, set ne karakter anlatmamız gerek.

Second question: yes, with caveats.

Her ikisi de iki dize bağımsız geçerli bir UTF-8 (PHP'nin . operatör olduğu gibi) byte-bilge birleştirilmiş güvenli olması ve hala geçerli UTF-8 olabilir. Ancak, bir POSTed dize geçerli bir UTF-8 olduğunu, bazı iş kendiniz yapmadan, hiçbir zaman emin olamayız. Çoğu DBMSs sizin için herhangi bir dönüşüm yapacak çünkü dikkatle, bağlantı karakter seti ise Veritabanı dizeleri, biraz daha kolaydır.

Kaynak kodu UTF-8 ise, o zaman dize değilse, UTF-8 - bu değil. Lütfen örnek dize ingilizce-sadece olduğundan, geçerli bir UTF-8'dir.

PHP kendisi karakter setlerinin bilmiyor. Eğer * fonksiyonu mb için malzeme geçirirseniz, bir UTF-8 dizesi olarak değerlendirir.

Birleştirme aksi bir sonucu olarak strange dize alacak, ben UTF-8 anlamak doğru :-) Sadece emin both dizeleri UTF-8 olarak yapmak, ne olursa olsun iyi çalışması gerekir.

Lütfen default_charset yönergesi yürütme herhangi oluşmadan önce UTF-8 olarak ayarlanmış olduğundan emin olun.

Doğrudan php.ini değiştirmek veya zamanında bunu ya

<?php

ini_set( 'default_charset', 'UTF-8' );