尤其是在编写用于不同服务器的PHP脚本时,最好在每个服务文档的顶部显式设置内部编码,例如:
mb_internal_encoding("UTF-8");
这与mysql语句“SET NAMES 'utf8'”结合使用,将节省大量的调试工作。
此外,请使用多字节字符串函数而不是您可能习惯使用的函数,例如mb_strlen()而不是strlen()等。
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
mb_internal_encoding — 设置/获取内部字符编码
encoding
encoding
是用于HTTP输入字符编码转换、HTTP输出字符编码转换以及mbstring模块定义的字符串函数的默认字符编码的字符编码名称。需要注意的是,内部编码与多字节正则表达式的编码完全不同。
从PHP 8.0.0开始,如果encoding
的值是无效的编码,则会抛出ValueError异常。在PHP 8.0.0之前,会发出E_WARNING
警告。
版本 | 描述 |
---|---|
8.0.0 |
encoding 现在可以为空。 |
8.0.0 | 如果encoding 是无效的编码,现在会抛出ValueError异常。以前会发出E_WARNING 警告。 |
示例 #1 mb_internal_encoding() 示例
<?php
/* 将内部字符编码设置为UTF-8 */
mb_internal_encoding("UTF-8");
/* 显示当前内部字符编码 */
echo mb_internal_encoding();
?>
尤其是在编写用于不同服务器的PHP脚本时,最好在每个服务文档的顶部显式设置内部编码,例如:
mb_internal_encoding("UTF-8");
这与mysql语句“SET NAMES 'utf8'”结合使用,将节省大量的调试工作。
此外,请使用多字节字符串函数而不是您可能习惯使用的函数,例如mb_strlen()而不是strlen()等。
全部放在一起
<?php
// ------------------------------------------------------------
header('Content-Type: text/html; charset=UTF-8');
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_regex_encoding('UTF-8');
// ------------------------------------------------------------
?>
请注意,源文件中的字符串必须与您通过mb_internal_encoding指定的编码匹配。解析器似乎从文件中加载原始字节,并参考其内部编码来确定它们的实际编码。
为了演示,当/source/文件为Latin-1编码时,以下输出符合预期
<?php
mb_internal_encoding("iso-8859-1");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "???<br/>";
?>???
现在,mb_internal_encoding的典型用法如下所示。将更改为“utf-8”,但保持/source/文件的编码不变
<?php
mb_internal_encoding("UTF-8");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "???<br/>";
?>???
输出只会显示<br/>标签,而不会显示文本。
将文件保存为UTF-8编码,然后结果将符合预期。
回复mortoray at ecircle-ag dot com
只要您将编码设置为更“Latin 1”兼容的编码(即US-ACSII、ISO-8859-1、ISO-8859-1或Windows 1252),字符就会正常显示。PHP.net自动检测为UTF-8