PHP中的编码问题(UTF-8)

PHP中的编码问题(UTF-8),php,encoding,utf-8,Php,Encoding,Utf 8,我想用PHP输出以下字符串: äöü߀ 因此,我手动将其编码为utf8: à 所以我的剧本是: <?php header('content-type: text/html; charset=utf-8'); echo 'ä ö ü ß €'; ?> 前4个字符是正确的(äöüß),但不幸的是欧元符号不正确: äöüß 你能告诉我我做错了什么吗?我的编辑器(记事本++)具有编码(Ansi/UTF-8)和格式(Windows/Unix)设置。我必须换吗 我希望你能帮助

我想用PHP输出以下字符串:

äöü߀

因此,我手动将其编码为utf8:

Ã

所以我的剧本是:

<?php
header('content-type: text/html; charset=utf-8');
echo 'ä ö ü ß €';
?>

前4个字符是正确的(äöüß),但不幸的是欧元符号不正确:

äöüß

你能告诉我我做错了什么吗?我的编辑器(记事本++)具有编码(Ansi/UTF-8)和格式(Windows/Unix)设置。我必须换吗


我希望你能帮助我。提前谢谢

最后一个字符不在文件中(请尝试查看源代码),这就是为什么您看不到它的原因

我认为您最好将PHP文件保存为UTF-8(在记事本++中,选项的格式是->编码为UTF-8,没有BOM),并在PHP文件中插入实际字符(即在记事本++),而不是到处插入
Ã
。您可能会发现Windows字符映射对插入unicode字符很有用。

欧元符号(U+20AC)以UTF-8编码,有三个字节,而不是两个字节。这是可以看到的。因此,您的编码完全错误。

您应该始终将编辑器设置为生成的HTML指示浏览器使用的相同编码。如果要将HTML页面解释为UTF-8,则将文本编辑器设置为UTF-8。PHP完全不知道用于创建文件的编辑器的编码设置;它将字符串视为字节流

换句话说,只要文件中有正确的字节,一切都会正常工作。确保文件中包含正确字节的最简单方法是将编码设置为网页应该包含的编码。任何其他的事情都会让生活变得更加艰难


但最好的防御措施是将非ASCII字符完全排除在代码之外。您可以将它们从数据库或本地化文件中取出。这意味着基本上可以在任何编辑器中修改代码,而无需担心会损坏编码。

如果要将其正确输出到utf8,脚本应为:

<?php
header('content-type: text/html; charset=utf-8');
echo "\xc3\xa4"."\xc3\xb6"."\xc3\xbc"."\xc3\x9f"."\xe2\x82\xac";
?>

这样,即使您的php脚本保存为非utf-8编码,它仍然可以工作

header('Content-Type: text/html; charset=UTF-8');
这只是通知浏览器您将发送什么类型的内容,以及应该如何处理。它不会设置您发送的实际内容的编码。履行自己的诺言完全取决于你自己。您的内容不会仅仅因为设置了标题就神奇地从任何内容转换为UTF-8。如果您告诉浏览器将内容视为UTF-8,但您发送的是拉丁文1编码的数据,那么它当然会中断

我建议你参考一下这对我来说很有效

    if (mb_check_encoding($value, 'UTF-8')) {
      return $value = utf8_encode($value);  
    }  
    else  {
      return $value;
    }

来源:

试试这个,它对我有用。此代码将更改为\¨toö

<?php

header('Content-Type: text/html; charset=UTF-8');
echo $category = 'Computer & Zubehör';
exit;

?>

结果:
Computer&Zubehör

您应该使用支持UTF-8的编辑器。您所做的只是使用ISO8859-1编写UTF-8的代码字。使用UTF-8您可以直接编写
äöü߀
。啊,对不起,这是Windows-1252而不是ISO 8895-1。不过,请注意,使用UTF-8可能会在文件开头插入U+FEFF。PHP一点也不喜欢它。@Johannes--我从来没有遇到过这个问题。UTF-8编码文件有什么问题?@warpech/@Johannes Rössel:这是字节顺序标记(BOM)。这里有更多信息:在记事本++中,您可以选择“UTF-8无BOM”作为编码,您不会遇到任何问题。谢谢,这似乎就是原因。:)处理文本的程序从输入中删除无效字节序列的情况并不少见。所以,当你以UTF-8做广告,并包含无效的UTF-8时,不要指望它会出现。不,我不这么认为。一切都很好。感谢您提供记事本++的提示!谢谢,我以后会这样做的。这将使编码更加容易。谢谢。回显行的具体功能是什么?它回显以下utf8编码的每个字符:äöü߀。在你最初的问题中,你说“我已经手动将其编码为utf8”。要真正做到这一点,请转到并搜索ä,您将在utf8中看到它是“\xc3\xa4”;