PHP搞乱HTML字符集编码

我有这个很奇怪的问题。 我有一个网站,包含一些德国的信件,当它只是没有PHP的HTML符号属性显示与编码时,我把它改为UTF-8他们不显示,而不是Ö我得到 。 当我把PHP放在PHP里面,用Zend工作室在Wamp上用charset = iso-8859-1编码启动它时,我得到了ï而不是Ö(我想补充一点,这个Ö是一个单选button的值) 。 当它在一个

标记显示正确。 你能告诉我如何解决这个问题。 我看看其他网站,他们有UTF-8编码和正确显示相同的符号。 我试图改变PHP的edior编码,但它并不重要,我认为 – > Zend Studio的编辑器中的一切正常显示…提前谢谢。

你可能来混合编码types。 例如。 以iso-8859-1forms发送但是从MySQL或XML获取UTF-8文本编码的页面通常会失败。

要解决这个问题,您必须保持对inputecodingstypes的控制权,与您select使用的编码types相关。

如果您将其作为iso-8859-1发送,则来自用户的input也是iso-8859-1。

 header("Content-type:text/html; charset: iso-8859-1"); 

如果MySQL发送latin1,你不需要做任何事情。

但是,如果您的input不是iso-8859-1,那么在将其发送给用户之前,或者在存储之前将其调整到Mysql之前,您必须对其进行转换。

 mb_convert_encoding($text, mb_internal_encoding(), 'UTF-8'); // If it's UTF-8 to internal encoding 

这意味着您必须始终将input转换为适合内部编码和汇编器输出以匹配外部编码。


这是我select使用的内部编码。

 mb_internal_encoding('iso-8859-1'); // Internal encoding 

这是我使用的代码。

 mb_language('uni'); // Mail encoding mb_internal_encoding('iso-8859-1'); // Internal encoding mb_http_output('pass'); // Skip function convert_encoding($text, $from_code='', $to_code='') { if (empty($from_code)) { $from_code = mb_detect_encoding($text, 'auto'); if ($from_code == 'ASCII') { $from_code = 'iso-8859-1'; } } if (empty($to_code)) { return mb_convert_encoding($text, mb_internal_encoding(), $from_code); } return mb_convert_encoding($text, $to_code, $from_code); } function encoding_html($text, $code='') { if (empty($code)) { return htmlentities($text, ENT_NOQUOTES, mb_internal_encoding()); } return mb_convert_encoding(htmlentities($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code); } function decoding_html($text, $code='') { if (empty($code)) { return html_entity_decode($text, ENT_NOQUOTES, mb_internal_encoding()); } return mb_convert_encoding(html_entity_decode($text, ENT_NOQUOTES, $code), mb_internal_encoding(), $code); } 

你能检查什么是响应头中的HTTP头字符集的值。 虽然信息是旧的(2009年),我不知道它是否仍然成立:如果你没有提供字符集的内容types头,PHP中的默认字符集是UTF-8。 资源

因此明确地设置标题:

 header("Content-type:text/html; charset: iso-8859-1"); 

更新我需要让我的编码/解码解迷。

inputPHP之前,尝试在UTF-8中解码string。

 $str = 'I ãm UTF-8'; echo(utf8_decode($str)); 

这对我工作:

 <?php $str = 'I ãm UTF-8: ÖMG!'; ?> Test: <input type = 'text' value = '<?php echo(htmlspecialchars(utf8_decode($str))); ?>'> 

input值(通过剪切n粘贴):

我UT UTF-8:ÖMG!

你为什么不使用

 &Ouml; 

而不是你的?