在PHP编码的问题(UTF-8)(Encoding problem (UTF-8) in PHP)

2019-08-04 03:46发布

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

A○ü߀

因此,我的编码是手动UTF8:

地狱öü好哦€

所以我的脚本是:

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

前4个字符是正确的(A○üSS)可惜€标志是不正确的:

A○üß

在这里,你可以看到它。

你能告诉我什么,我做错了? 我的编辑器(记事本++)具有编码(ANSI / UTF-8)和格式(在Windows / Unix的)设置。 我一定要改变他们?

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

Answer 1:

这最后一个字符不是所要的文件(尝试查看源代码),这就是为什么你看不到它。

我想你可能会更好保存PHP文件为UTF-8(在记事本+ +选项,这个选项是格式提供 - >编码为UTF-8无BOM),并插入你的PHP文件中的实际字符(即在记事本++)而不是黑客周围插入Ã无处不在。 您可能会发现Windows字符映射表插入Unicode字符非常有用。



Answer 2:

欧元符号(U + 20AC)进行编码以UTF-8有三个字节,而不是两个。 这可以看出这里 。 所以,你的编码是完全错误的。



Answer 3:

如果你想输出得当为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编码这样的话,它仍然会正常工作。



Answer 4:

你应该总是设置你的编辑器来了生成的HTML指示使用浏览器相同的编码。 如果HTML网页的目的是被解释为UTF-8,然后设置你的文本编辑器UTF-8。 PHP是完全不知道的用于创建该文件的编辑器的编码设置; 它把字符串作为字节流。

换句话说,只要正确字节的文件,这样就可以了。 而且,以确保正确字节文件中的最简单的方法,是将您的编码设置为相同的一个网页应该是在,还有什么只是让生活比它需要更加困难。

但是,最好的防御就是彻底离开非ASCII字符进行编码的。 你可以将它们拉出来一个数据库或本地化文件代替。 这意味着代码可以在基本上任何编辑,而无需担心破坏编码修改。



Answer 5:

header('Content-Type: text/html; charset=UTF-8');

这只是告诉你要什么样的内容,发送以及如何应该把它的浏览器。 它不设置你发送的实际内容的编码。 这完全取决于你履行自己的诺言。 你的内容是不会神奇地变换无论从任何为UTF-8,只是因为你设置标题。 如果你告诉浏览器治疗内容为UTF-8,但你在发送的Latin-1编码的数据,当然这将打破。

我是指你什么每个程序员绝对,肯定需要知道编码和字符集进行工作,文本



Answer 6:

这个工作对我来说

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

来源: https://github.com/jdorn/php-reports/issues/100



文章来源: Encoding problem (UTF-8) in PHP