"htmlspecialchars'dan" gibi PHP fonksiyonları değişim varsayılan karakter seti

3 Cevap php

PHP 5.2.6 kullanıyorum ve benim app karakter seti UTF-8'dir.

Now, how should I change PHP's default character set? NOT the one which specifies output's mime time and character set.

Ama vb htmlspecialchars'dan, Htmlentities, gibi tüm PHP fonksiyon için değişecek olan

Biliyorum, giriş dizesi karakter kümesini alır bu fonksiyonlarda bir parametre yoktur. Ama kullanan tüm fonksiyonlar için belirtmek istemiyorum. Yerde ben unutursam Ve bu karışıklık olacak.

Ben de bu işlevleri sarın ve benzeri kendi sarıcı oluşturmak olduğunu, biliyoruz:

function myHtmlize($str)
{
  return htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
}

Ben de, bu çözüm sevmiyorum.

Gerçekten varsayılan olarak 'UTF-8' karakter kümesi olarak almak, PHP söylemek istiyorum. Değil 'iso-8859-1'.

Bu mümkün mü?

3 Cevap

Bunun gibi mi? http://us2.php.net/manual/en/function.setlocale.php

* LC_ALL for all of the below
* LC_COLLATE for string comparison, see strcoll()
* LC_CTYPE for character classification and conversion, for example strtoupper()
* LC_MONETARY for localeconv()
* LC_NUMERIC for decimal separator (See also localeconv())
* LC_TIME for date and time formatting with strftime()
* LC_MESSAGES for system responses (available if PHP was compiled with libintl)

C-fonksiyonu determine_charset(char *charset_hint ...) dayalı "doğru" charset bulmak için kullanıldığı var

in that order and depending on whether some extensions are built-in or not.
The "problem" is, when you call htmlentities('xyz') this determine_charset() is called with charset_hint=NULL and the first this function does is:

/* Guarantee default behaviour for backwards compatibility */
if (charset_hint == NULL)
    return cs_8859_1;

En az htmlentitiesi ('xyz', ENT_QUOTES, '') aramak zorunda

Ben tamamen emin değilim, ama think mbstring.func_overload htmlentities. ile çalışır

htmlspecialchars btw charset-nötrdür. (En azından sürece charset utf-8 yapar ascii alt kümesini destekler gibi).