【问题标题】:Function parameter with strange charset behavior in PHPPHP中具有奇怪字符集行为的函数参数
【发布时间】: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


【解决方案1】:

这是关于你的文本编辑器的。

尝试从代码中删除两个“Rio, coração do Brasil”字符串,然后再写一次。

【讨论】:

  • 嗨,彼得!对不起,但我不明白。在哪里再写一次?
  • @masimao:从脚本中的字符串中删除,然后在 utf-8 编辑器中重新键入它们。可能是文件在非 utf8 模式下更改,因此Rio 字符串的两个副本之一实际上是在 iso-8859 模式下输入的。
  • @Peter Szymkowski,我已经删除了两个 'Rio, coração do Brasil' 字符串并再写一次,这一次也返回 UTF-8。只有参数 $label 具有 de ISO-8859-1 字符集。
  • @Marc B,爆头!我通常使用 Dreamweaver,但在 Google 上搜索我发现了一些使用记事本打开文件并将其保存为 UTF-8 字符集的提示。我在记事本中看到 Dreamweaver 将文件保存为 ANSI,我认为这会产生字符集问题,因为现在 mb_detect_encoding() 始终检测 UTF-8。非常感谢! =)
【解决方案2】:

在@Marc B 和@Michael Madsen 的帮助下,我下载了Notepad++ (PHP IDE) 并在没有BOM 的情况下转换了文件UTF-8 字符集,所以我的所有问题都得到了解决。 Dreamweaver 将一些文件保存为 ANSI,这引起了 PHP 的混乱。

非常感谢大家!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多