更改PHP函数的默认字符集,如“htmlspecialchars”

时间:2009-07-24 07:38:34

标签: php character-encoding

我使用的是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'。

有可能吗?

4 个答案:

答案 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');

来源: