2009-09-07 42 views
5

我想输出在PHP以下字符串:编码问题(UTF-8)在PHP

A○ü߀

因此,我编码它手动UTF8:

澶ö那张߀

所以我的脚本是:

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

前4个字符是正确的( öüß)可惜€标志是不正确的:

A○üß

Here you can see it.

你能告诉我什么,我做错了?我的编辑器(Notepad ++)具有编码(Ansi/UTF-8)和格式(Windows/Unix)的设置。我必须改变它们吗?

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

+3

您应该使用支持UTF-8的编辑器。你所做的只是使用ISO 8859-1来编写UTF-8的代码字。使用UTF-8,您可以直接编写“äöü߀'。 – Gumbo 2009-09-07 10:27:05

+1

啊,对不起,这是Windows-1252而不是ISO 8895-1 – Gumbo 2009-09-07 10:29:53

+0

但是请注意,使用UTF-8可能会在文件的开头插入U + FEFF。而PHP完全不喜欢这一点。 – Joey 2009-09-07 10:35:51

回答

8

最后一个字符不在文件中(尝试查看源代码),这就是为什么你没有看到它。我认为你可能更好的将PHP文件保存为UTF-8(在Notepad ++中,选项可用格式 - >在没有BOM的UTF-8中编码),并将实际字符插入到PHP文件中在Notepad ++中),而不是随处插入Ã。您可能会发现Windows字符映射对于插入Unicode字符很有用。

+0

为什么downvote?我有什么问题吗? – 2009-09-07 10:57:22

+0

不,我不这么认为。一切安好。感谢您使用Notepad ++提示! – caw 2009-09-07 13:37:46

5

欧元符号(U + 20AC)以UTF-8编码,三位字节,而不是两位。这可以看到here。所以你的编码是完全错误的。

+0

谢谢,这似乎是原因。 :) – caw 2009-09-07 13:37:13

+1

任何处理文本从输入中删除无效字节序列的情况并不少见。所以当你以UTF-8做广告并且包含无效的UTF-8时,不要指望它在那里。 – Joey 2009-09-07 14:30:07

2

您应该总是将您的编辑器设置为生成的HTML指示浏览器使用的编码。如果HTML页面旨在被解释为UTF-8,那么将您的文本编辑器设置为UTF-8。 PHP完全不知道用于创建文件的编辑器的编码设置;它将字符串视为一个字节流。

换句话说,只要正确的字节在文件中,一切都会起作用。确保文件中包含正确字节的最简单方法是将您的编码设置为与网页应该位于同一个字符的编码。其他任何事情都会让生活变得比需要的更困难。

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

+0

谢谢,我将来会这样做。它确实会使编码更容易。 – caw 2009-09-07 13:39:22

4

如果你想输出得当为utf8,你的脚本应该是:

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

即使你的PHP脚本保存到非utf8编码这种方式,它仍然可以工作。

+0

谢谢。回波线究竟做了什么? – caw 2011-08-18 17:30:45

+0

它反映了以utf8编码的以下每个字符:äöü€。在你原来的问题中,你说“我已经手动编码到utf8”。要真正做到这一点,请访问http://www.utf8-chartable.de/并搜索ä,您将在utf8中看到它是“\ xc3 \ xa4”; – velcrow 2011-08-25 22:38:11

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

这只是告诉浏览器你要发送什么样的内容以及它应该如何处理它。它不会设置您要发送的实际内容的编码。履行自己的承诺完全取决于你。仅仅因为您设置了该标题,您的内容不会奇迹般地从UTF-8转变为UTF-8。如果您告诉浏览器将内容视为UTF-8,但您发送的是Latin-1编码的数据,当然它会中断。

我是指你What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text