【发布时间】:2011-10-17 19:33:13
【问题描述】:
我有以下 PHP 代码:
<?php
ini_set( 'default_charset', 'UTF-8' );
mb_internal_encoding('UTF-8');
function labelValidate($label)
{
echo mb_detect_encoding($label.'x', 'UTF-8, ISO-8859-1');
echo '<br />';
echo mb_detect_encoding('Rio, coração do Brasil', 'UTF-8, ISO-8859-1');
}
labelValidate('Rio, coração do Brasil');
?>
我得到这个输出:
ISO-8859-1 UTF-8
任何人都知道为什么参数 $label 具有 ISO 字符集,但我在函数内部创建的直接回显具有 UTF-8 编码?
这让我很头疼,因为我必须在 $label var 中放置一个 utf8_encode,否则我会在输出中得到有问题的字符。
感谢您的帮助!
【问题讨论】:
-
使用严格模式(第三个参数)会得到什么?
-
@str 我已经输入了第三个参数(true),但我得到了相同的结果。
-
不要使用记事本将 PHP 代码保存为 UTF-8!它将在文件的开头插入 3 个额外的字节(所谓的字节顺序标记),这将被视为输出(在客户端上将不可见,因为它对应于零宽度空间),因此防止您可以使用
header函数。将 Dreamweaver 设置为另存为 UTF-8,或使用其他不强制 BOM 的编辑器。 -
@MichaelMadsen,你拯救了我的一天!使用记事本,脚本生成了一个不可见的输出,导致布局崩溃,所以我下载了记事本++,它有很多字符集选项,包括在没有 BOM 的情况下转换为 UTF-8。非常感谢您的帮助!
标签: php function parameters character-encoding