我使用的是PHP 5.2.6,我的应用程序的字符集是UTF-8。
现在,我应该如何更改PHP的默认字符集? 不是指定输出的mime时间和字符集的那个。
但是对于htmlspecialchars,htmlentities等所有PHP函数都会改变。
我知道,这些函数中有一个参数,它接受输入字符串的字符集。但我不想指定我使用的所有功能。如果我忘记的某个地方,那将是一团糟。
我也知道,我可以包装这些函数并创建我自己的包装器,如:
function myHtmlize($str)
{
return htmlspecialchars($str, ENT_COMPAT, 'UTF-8');
}
我也是,不喜欢这个解决方案。
我真的想告诉PHP,默认情况下将'UTF-8'作为字符集。不是'iso-8859-1'。
有可能吗?
答案 0 :(得分:2)
喜欢这个吗? 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)
答案 1 :(得分:2)
有一个C函数 determine_charset(char * charset_hint ...),用于根据
查找“正确”的字符集按此顺序,取决于是否内置某些扩展程序 “问题”是,当你调用 htmlentities('xyz')时,使用charset_hint = NULL调用 determine_charset(),这个函数的第一个是:
/* Guarantee default behaviour for backwards compatibility */
if (charset_hint == NULL)
return cs_8859_1;
你必须打电话至少htmlentities('xyz',ENT_QUOTES,'')
答案 2 :(得分:1)
我不完全确定,但认为 mbstring.func_overload
适用于htmlentities.
htmlspecialchars
是charset-neutral btw。 (至少只要charset支持ascii子集,utf-8就可以了。)
答案 3 :(得分:0)
从php.net:
5.4.0编码参数的默认值已更改为UTF-8。
在现代,您只需要将PHP版本更新到5.4或更高版本,并将php.ini中的default_charset指令设置为UTF-8(已经是默认值)即可。您也可以像这样通过编程方式做到这一点:
ini_set('default_charset', 'UTF-8');
来源: