为了账号安全,请及时绑定邮箱和手机立即绑定

如何最好地配置PHP以处理UTF-8网站

如何最好地配置PHP以处理UTF-8网站

PHP
MMMHUHU 2019-11-29 09:59:02
您将推荐哪些扩展,以及如何最好地配置php以创建一个对所有内容都使用utf-8编码的网站。例如...页面输出为utf-8表单提交以utf-8编码的数据字符串数据的内部处理(例如,与数据库对话时)也都在utf-8中。看来php目前无法很好地应对多字节字符集。到目前为止,我已经知道mbstring看起来像是一个重要的扩展。这值得麻烦吗..?
查看完整描述

3 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

带有Unicode内容的PHP的假定问题有些夸大了。自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">


查看完整回答
反对 回复 2019-11-29
?
森林海

TA贡献2011条经验 获得超2个赞

我遇到了相同的问题UTF-8 characters,一切都在实时服务器和登台服务器上运行,但是有时它在我的开发机上坏了。行为真是太奇怪了,有时字符进行编码正确,但随机页面重载它开始打破Diamond Charters '���เห็นอเวิลด์!���'或Question mark '??�เห็นอเวิลด์!???'或85个%的数据是正确的渲染'เห็นอเวิลด์!?��',但休息15%的出无与伦比的字符。我一直在寻找解决问题的方法。所以,从我的清单开始


1-检查是否在HTML中添加了字符标题


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


3-检查MySQL是否为UTF-8设置了正确的编码


4-检查Apache是否具有设置以处理UTF-8字符集


5-检查简单的PHP是否可以回显与输入“เห็นอเวิลด์”相同的“เห็นอเวิลด์”输出


6-检查PHP是否发送正确的Headers输出


7-检查MySQL查询是否获得相同的数据“เห็นอเวิลด์”


8-检查“เห็นอเวิลด์”是否有一些html字符,请正确处理


9-检查“เห็นอเวิลด์”是否通过任何html编码解码功能


10-检查.htaccess是否已全部设置为处理UTF-8字符集


检查以上所有列表,找出出现问题的地方。


试试看(我正在使用Codeigniter):


=================================

:: 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');

    }

}


查看完整回答
反对 回复 2019-11-29
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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从电子表格中读取泰语字符。我最终成功了,但仍然不确定我做对了什么。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 324 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信