2012-02-19 40 views
27

在「PHP Cookbook」中,他們說(p.589)要正確設置輸出數據的字符編碼爲utf-8,必須將default_encoding配置編輯爲utf-8。將PHP默認編碼設置爲utf-8?

但是,我無法在php.ini中找到此配置。我應該簡單地添加一條會說default_encoding = "utf-8"的線嗎?我有一個;default_charset = "iso-8859-1"。正如你所看到的(;),現在它沒有被激活。我應該刪除分號並將其設置爲"utf-8"?這是否照顧默認編碼?

我還發現了其他的編碼指令,我不知道該怎麼做:

[iconv] 
;iconv.input_encoding = ISO-8859-1 
;iconv.internal_encoding = ISO-8859-1 
;iconv.output_encoding = ISO-8859-1 
... 
; http://php.net/exif.encode-unicode 
;exif.encode_unicode = ISO-8859-15 
... 
;mssql.charset = "ISO-8859-1" 
... 
;exif.encode_unicode = ISO-8859-15 

是否有任何理由爲什麼我不應該簡單地全部更換與utf-8

回答

38

你應該設置你的default_charset爲UTF-8:

default_charset = "utf-8" 

(PHP食譜中可能存在一個錯字,如果他們問你改變default_encoding - 我從來沒有聽說過。)

如果您要輸出UTF-8編碼字符,您還需要確保您的網絡服務器設置爲輸出UTF-8。在Apache中,這可以通過在httpd.conf文件中設置:

AddDefaultCharset UTF-8 

至於修改iconvexifmssql編碼設置,你可能並不需要這些設置(設置有這些註釋掉無論如何),但最好將它們全部更改爲UTF-8。

+0

對於Apache,我沒有一個'http.conf'文件。我使用WAMPserver,他們通過'httpd.conf'文件發送Apache。我想他們是一樣的東西?另外,是你手動添加的一行嗎?我的'httpd.conf'文件中沒有關於charset的信息。 – JDelage 2012-02-19 19:21:59

+1

這實際上是我的錯誤(更正)。如果在配置文件中沒有看到對AddDefaultCharset的引用,你可能需要查看包含配置的文件(它會像'Include conf/extra/[something]')來查看它是否被設置在任何這些。如果沒有,只需將它添加到主httpd.conf文件中即可。 – 2012-02-19 19:30:32

+0

是否有解釋所有這些編碼函數做什麼的解釋? – CMCDragonkai 2014-01-07 06:37:36

6

修改行

;default_charset = "iso-8859-1" 

閱讀

default_charset = "utf-8" 

關於其他選項,不要碰它們。避免默認設置,始終明確設置在你所做的一切

  • 數據庫連接的編碼,
  • 讀取和寫入文件,
  • 用的iconv轉換。

另外,要小心保存PHP文件的編碼,確保它們使用UTF-8編碼,特別是如果它們包含要顯示或比較的字符串。

-2

改變* DEFAULT_CHARSET = 「UTF-8」 ** DEFAULT_CHARSET = 「ISO-8859-1」 *作品對我來說(我使用Apache Web服務器和Linux OS)。由於某些原因,當我使用utf-8時,某些字符渲染效果不佳。根據所使用的網絡瀏覽器,它們可能會更改爲方塊或問號。

+3

如果將.php文件存儲爲ISO-8859-1,並且PHP的默認字符集設置爲UTF-8,則會遇到問題。但是,這裏的正確解決方案不是將PHP設置爲ISO-8859-1,而是確保您的編輯器將.php文件存儲爲UTF-8。 ISO-8859-1與* World Wide * Web的匹配很差。 – RavuAlHemio 2014-01-12 01:44:35

3

我在我的mysql查詢中遇到了一個問題,它無法識別一些拉丁文縮寫,所以查詢會失敗。我認爲這可能是PHP文件等,直到我發現使用pdo來調用mysql我不得不添加字符集。奇怪的是,我以前的服務器使用得很好!

$dsn = 'mysql:host=localhost;dbname=retirodo_main;charset=utf8'; 
- - - - - - - - - - - - - - - - - - - - - - - - - ^^^^^^^^^^^^ 
+0

@Marcos當你編輯答案時,我看到粗體已經丟失,並被翻譯成「**」...... asnwer不應該是你看到的文字。因爲那是大膽的減價。 – Miguel 2017-08-31 15:07:11

+0

已修復,@miguel,對不起 – 2017-09-05 09:28:27

0

解決方法我將「UTF-8」更改爲「UTF-8」(不帶破折號),改爲解決問題。

CentOS的

Izaias莫拉

0

在htaccess的級別(.htaccess文件),PHP指令應php_value default_charset UTF-8