如何最好地配置PHP来处理UTF-8网站(How to best configure PHP to

2019-08-31 08:52发布

你会推荐什么样的扩展,应该如何PHP的得到最好的配置为创建使用UTF-8编码适用于所有的网站。 例如...

  • 页输出为UTF-8
  • 形式提交以UTF-8编码的数据
  • 串数据的内部处理(例如说给数据库时)都以UTF-8为好。

看来,PHP并没有真正很好地应对多字节字符集的时刻。 到目前为止,我已经摸索出MBSTRING看起来像一个重要延伸。

是否值得冒这个险..?

Answer 1:

PHP的使用Unicode内容应该问题已经有所夸大。 自1998年以来我一直在做多语种网站和从来不知道,直到我读过有关它的地方,有可能是一个问题 - 多年以后的网站。

这只是正常的我:

Apache的配置(在httpd.conf或htaccess的)

AddDefaultCharset utf-8

PHP(在php.ini中)

default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6 

MySQL的

CREATE与数据库utf8_*整理,让表继承数据库归类,并开始与每个连接"SET NAMES utf8"

HTML(在HEAD元件)

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


Answer 2:

我正面临同样的问题为UTF-8 characters ,一切工作现场服务器和分期服务器上,但有时它打破我的dev的机器。 行为真是太奇怪了,有时字符是正常,但随机页面重载编码是开始打破与Diamond Charters ' เห็นอเวิลด์! 'Question mark '?? เห็นอเวิลด์!???' 或85%的数据被正确地渲染'เห็นอเวิลด์!? '但休息15%的出无与伦比的字符。 我一直在寻找解决这个问题。 于是,开始与我的清单

1 -检查字头中添加HTML


2 -检查数据正确保存在MySQL表


3 -检查如果MySQL没有UTF-8编码正确设置


4 -检查如果Apache已经设置为处理UTF-8字符集


5 -检查简单的PHP可以回声看世界”输出与输入相同“看世界”。


6 -检查PHP发送正确的头输出


7 -检查MySQL查询得到同样的数据“ 看世界”。


8 -检查“看世界”有一定的HTML字符,以应对他们正确。


9 -检查“看世界”经过任何HTML编码解码功能


10检查所有的.htaccess设置为处理UTF-8字符集


检查所有上面的列表,以找出其中something..breaking。

试用一下(我用笨):

=================================
:: PHP ini Settings::
=================================

default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=6 

=================================
:: .htaccess Settings::
=================================

DefaultLanguage en-US
AddDefaultCharset UTF-8

=================================
:: HTML Header Page::
=================================

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

=================================
:: PHP Codeigniter index.php ::
=================================

header('Content-Type: text/html; charset=UTF-8');

=================================
:: Codeigniter config.php ::
=================================

$config['charset'] = 'UTF-8';

=================================
:: Codeigniter database.php ::
=================================

$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';

=================================
:: Codeigniter helper function (optional)
=================================

if(!function_exists('safe_utf_string')){
    function safe_utf_string($utf8string= ''){
        $utf8string = htmlspecialchars($utf8string, ENT_QUOTES, 'UTF-8');
        return mb_convert_encoding($utf8string, 'UTF-8');
    }
}

而最后不要忘了说谢谢! :)来@djn答案



Answer 3:

PHP科佩斯就好了!

你应该在php.ini“DEFAULT_CHARSET”参数设置为“UTF-8”。

该请确保: -

<head>
  <meta http-equiv="Content-Type"
    content="text/html; charset=utf-8"
    />

在您服务于每一个页面的顶部。

有几个方面的问题:

数据库 - 确保他们默认配置为使用UTF-8或进入痛苦的世界。

的IDE /编辑 - 很多编辑不支持UTF-8好。 我通常使用vim这不,但它从来就不是一个大问题。

文件 - 只需花了整整一个下午让PHP读取泰语字符出一个电子表格。 我最终还是成功的,但我仍然不知道我做得对。



Answer 4:

如果MBSTRING是不是已经在你的PHP包的一部分,那么我肯定会推荐给你 - 你甚至会想用它来calculationg字符串长度(mb_strlen($ string_var,“utf-8”))的形式输入...否则,你将不再需要,除了有效和适当的HTML什么,正确的HTTP的服务器配置(这样服务器将提供网页unsing UTF-8)和使用UTF-8支持(如记事本++)文本编辑器。



Answer 5:

在你的php.ini,设置

mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

这样你就不需要每次的编码参数传递给MB_功能。



Answer 6:

2018更新:::

敬请有限,这些php.ini中的条目已被弃用;

;mbstring.internal_encoding = utf-8
;mbstring.http_input =
;mbstring.http_output = utf-8

设置DEFAULT_CHARSET就足够了。

 default_charset = "UTF-8"


文章来源: How to best configure PHP to handle a UTF-8 website
标签: php utf-8