2014-10-27 40 views
2

在php 5.4中,我的代碼不能正常工作。我使用西里爾字符集。總之:php 5.4例外的字符集

throw new Exception('Сообщение'); 

將輸出:

Fatal error: in test.php ...

雖然結果是:

Fatal error: Uncaught exception 'Exception' with message ...

如果我不使用西裏爾字母,結果是好的。而且,如果我在5.3中運行這個代碼,我會得到正確的結果。 I. e。如果我使用西里爾文,結果消息是空字符串。

回答

0

有例外的非UTF-8字符的報告問題。嘗試消息轉換爲UTF-8,像這樣:

throw new Exception(utf8_encode('Сообщение')); 

如果不工作,然後嘗試以下方法:

$message = 'Сообщение'; 
$message = mb_convert_encoding($message, 'Windows-1251', 'UTF-8'); 
throw new Exception($message); 

- 編輯 -

實際問題不是沒有存儲異常消息,而是 - 異常無法正確顯示。在PHP 5.3中,默認情況下xdebug未打開,在PHP 5.4中打開。 xdebug設置爲以UTF-8格式顯示所有內容,並且您的消息可能以其他字符集編碼,因此消息不能正確顯示。

如果您滾動到this頁面的底部,您會發現一條涉及此問題的註釋。

PHP本身上進行跟蹤here

This stackoverflow thread也涉及到同樣的問題,這個問題。

您可以通過將xdebug編碼設置爲非UTF-8字符集來避開。請read the xdebug manual regarding this

+0

問題是我已經有一個大項目,所以不幸的是它不是我的解決方案。可能我正在尋找一個能讓我的代碼正常工作的設置。 – tolec 2014-10-27 12:45:46

+0

請你給一個這些問題的鏈接? – tolec 2014-10-27 12:48:48

+0

用一些參考文獻和更好的解釋編輯答案 – dnshio 2014-10-27 13:11:00