我正在尝试在网站上放置一些中文文本,但是一旦网页被放在网上,而不是中文文本,我会看到一排问号??????????? ???????????
我在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" />
答案 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查询。