您会推荐哪些扩展以及应该如何最好地配置 php 来创建一个对所有内容都使用 utf-8 编码的网站。例如...
目前php似乎并不能很好地处理多字节字符集。到目前为止,我已经发现 mbstring 看起来是一个重要的扩展。
值得这么麻烦吗..?
关于 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">
我遇到了同样的问题
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');
}
}
最后别忘了说声谢谢! :) 到@djn回答
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 从电子表格中读取泰语字符。我最终成功了,但仍然不确定我做对了什么。
请注意,这些 php.ini 条目已弃用;
;mbstring.internal_encoding = utf-8
;mbstring.http_input =
;mbstring.http_output = utf-8
下一步...
PHP - 通过 Web 应用程序的 config.php 文件为以下内容设置 utf8
ini_set('default_charset', 'UTF-8');
mb_internal_encoding('UTF-8');
iconv_set_encoding('internal_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'UTF-8');
MariaDB / MySQL - 通过以下方式设置 utf8:
mysqli::set_charset ( "utf8mb4" );
HTML 页面 - 通过以下方式设置:
<meta charset="utf-8" >
如果 mbstring 还不是您的 PHP 包的一部分,那么我肯定会向您推荐它 - 您甚至会想使用它来计算表单输入的字符串长度( mb_strlen($string_var, 'utf8') )。 。 否则,除了有效且正确的 HTML、正确的 http-server-config(因此服务器将提供不支持 utf-8 的页面)和支持 utf-8 的文本编辑器(例如 Notepad++)之外,您不需要任何东西。
在你的 php.ini 中设置
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
这样您就不需要每次都将编码参数传递给 mb_ 函数。