2011-09-15 57 views
1

我有2個不同的提供商在提供商託管計劃我的網站工作沒有一個單一的問題,但提供商B無論我做什麼UTF-8從來沒有工作。UTF-8在託管A上工作,但不託管B,可能會導致它?

兩個託管網站在每個方面都完全一樣,所以我們在這裏唯一的區別是服務器。

如果我簡單的創建一個文件,記事本上節約以下內容爲UTF-8 ENC:

<?php 
header('content-type: text/html; charset: utf-8'); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
<? 
    $var = "áéíóí"; 
    echo $var; 
?> 
<body> 
<html> 

它工作正常上託管,但無法顯示在主機B.

人物我已經檢查了兩個php.ini文件,並且都有相同的信息。

我還有什麼可以嘗試,更改或試圖讓託管B的UTF-8工作?

從我可以告訴它似乎wholelly服務器端問題的一些配置丟失或其他原因,否則爲什麼同一個網站將工作託管A而不演示一個單一的問題?

捲曲響應主機B:

[email protected]:~# curl -v http://painel.xxxxxx.com/test.php 
* About to connect() to painel.xxxxxx.com port 80 (#0) 
* Trying 10.0.0.2... connected 
* Connected to painel.xxxxxx.com (10.0.0.2) port 80 (#0) 
> GET /test.php HTTP/1.1 
> User-Agent: curl/7.20.1 (i686-pc-linux-gnu) libcurl/7.20.1 OpenSSL/0.9.8n zlib/1.2.5 libidn/1.5 
> Host: painel.xxxxxx.com 
> Accept: */* 
> 
< HTTP/1.1 200 OK 
< Date: Thu, 15 Sep 2011 11:55:33 GMT 
< Server: Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8n DAV/2 mod_python/3.3.1 Python/2.6.4 PHP/5.3.6 SVN/1.6.11 mod_fastcgi/2.4.6 
< X-Powered-By: PHP/5.3.6 
< Transfer-Encoding: chunked 
< Content-Type: text/html; charset=utf-8 
< 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 
<body> 
áéíóíaed<body> 
* Connection #0 to host painel.xxxxxx.com left intact 
* Closing connection #0 
<html> 

螢火響應從我的電腦主機B:

HTTP/1.1 200 OK 
Date: Thu, 15 Sep 2011 12:06:21 GMT 
Server: Apache/2.2.15 (Unix) mod_ssl/2.2.15 OpenSSL/0.9.8n DAV/2 mod_python/3.3.1 Python/2.6.4 PHP/5.3.6 SVN/1.6.11 mod_fastcgi/2.4.6 
X-Powered-By: PHP/5.3.6 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=utf-8 

Host painel.xxxxxxx.com 
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection keep-alive 
Cookie 
Cache-Control max-age=0 

到目前爲止已經試過:從操作系統到EN_US

  • 改變興田區域。 UTF8
  • 更改了apache上的默認字符集
  • 設置沙雷爲UTF-8上的php.ini
  • 文件都保存在UTF8
  • 同一文件上都託管計劃測試,只適用於在的第一行託管A.
  • 代碼mb_internal_encoding("UTF-8");
  • 在代碼setlocale(LC_CTYPE, 'C');
  • 上述2一起
  • header('content-type: text/html; charset: utf-8');header('content-type: text/html; charset=utf-8');
012的第一行

回答

2

添加後續行到php.ini文件,並重新啓動httpd服務的伎倆:

mbstring.internal_encoding=utf-8 
+1

這意味着服務器啓用了Zend多字節,這有點奇怪,因爲它帶來了很大的性能損失,但效果不大。 – Artefacto

+0

@Artefacto true我剛剛驗證過它已啓用。 '--enable-zend-multibyte'這是很好的知道它是原因。我將回顧我們的php需求,以便重新編譯它。感謝您的評論。 – Prix

2

它應該閱讀:

header('content-type: text/html; charset=utf-8'); 

此外,對於您的情況下,只有兩件事情是有關 - 在Content-type頭(如果缺少相應的meta標籤),並在實體實際使用的編碼。忘記一切。

+0

不會在任何方式工作。 – Prix

+0

@Prix那麼,在這種情況下,您可以開始轉儲兩個響應中發送的標題並進行比較。如果它們與內容類型相似,則移動以查看實體是否有任何差異。 – Artefacto

+0

抱歉在客戶端轉儲標題?你能否在這裏指出一些方向? – Prix