问号而不是汉字

时间:2010-06-24 03:23:24

标签: php character-encoding cjk

我正在尝试在网站上放置一些中文文本,但是一旦网页被放在网上,而不是中文文本,我会看到一排问号??????????? ???????????

我在WAMP服务器上测试了相同的页面,然后将它放到网上(所有页面都有一个php扩展名),中文字符显示得很好,只有当从在线主机服务器请求页面时,才能看到所有页面问号。

页面包含(如果这有帮助):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

4 个答案:

答案 0 :(得分:3)

如果您正在使用某种数据库,请确保在查询数据库之前运行此数据库(但在建立连接后):

mysql_set_charset("utf8");

答案 1 :(得分:1)

实际的HTTP响应标头将始终覆盖HTML <meta>标头。根据你的评论:

  

我对标题不太熟悉,以下是工作页面的响应标题:

Date: Thu, 24 Jun 2010 05:24:23 GMT 
Server: Apache/2.0.63 (Win32) PHP/5.2.11 
X-Powered-By: PHP/5.2.11 
Content-Length: 3622 
Keep-Alive: timeout=15, max=100 
Connection: Keep-Alive 
Content-Type: text/html; charset=UTF-8 
200 OK
  和非工作页面:
Date: Thu, 24 Jun 2010 05:26:54 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.12 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: text/html 
200 OK

请参阅,非工作页面的HTTP响应标头的Content-Type text/html 没有任何指定的字符集。应该是text/html; charset=UTF-8

您可以通过将以下行添加到PHP页面的顶部之前向响应正文发出任何字符(HTML)来解决此问题。

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

更新:根据评论,上述原因似乎被排除在外。接下来检查;文件本身是否保存为UTF-8?右键单击页面和查看源。问号也在吗?如果是这样,那么在FTP传输到托管期间出现了问题。在FTP客户端设置中选择二进制而不是文本/ ASCII或为传输的文本文件设置字符编码,然后重试。

答案 2 :(得分:0)

我遇到了类似的问题,并且能够解决它。

我的网站内容通过PHP传递。当我将其视为原始HTML文件时,它会正确显示字符,但如果我通过PHP传递它(在我的情况下,通过使用auto_prepend_file),它会将字符转换为问号。

解决方法是在PHP设置中关闭detect_unicode。就我而言,我刚刚编辑了.htaccess文件以包含以下行:

php_value detect_unicode "0"

......汉字开始正常显示。使用ini_set()可能会有一个等效的解决方案。

希望这有帮助。

答案 3 :(得分:0)

由于PHP中的mysql_ *函数自PHP 5.5.0起已弃用,因此这里可以执行的SQL基本上与mysql_set_charset相同:

SQL SET character_set_client = utf8

这是获取我的表单以将unicode文本保存到MySQL的关键。在建立与MySQL服务器的连接后立即执行该SQL查询。