2012-11-03 51 views
5

起初,我認爲問題是當我從ajax調用中返回echo json_encode($ row)時,將結果更改爲NULL。但經過測試,我發現問題在此之前就存在。php中有特殊字符,比如ñ

在樣本php文件用:

$test = "Nuñez" 
echo $test 

結果卻Nuez

我搜索周圍,但沒有建議的解決方案的工作。像:

mb_internal_encoding('UTF-8'); 
mb_http_output('UTF-8'); 
mb_http_input('UTF-8'); 
mb_language('uni'); 
mb_regex_encoding('UTF-8'); 
ob_start('mb_output_handler'); 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />,或header('content-type: text/html; charset: utf-8');。還有一些我已經忘記的解決方案,相信我,我嘗試了很多。

這只是它的開始,我希望這不會是一個問題,因爲我的數據庫是在UTF-8,所以是我的$ mysqli字符集。但我認爲我不能說ajax json_encode一樣。但是沒關係,一次只有一個問題。任何人都可以幫助我。非常感謝!

問題就解決了我不得不設置「編碼爲UTF-8」在記事本++,因爲它以前是「編碼的ANSI」。

+1

你確定這個字符串在第一個地方是UTF-8,發送之前和發送之後所有的標題都是UTF-8嗎? – Svetoslav

+0

我該怎麼做?我有'header('content-type:text/html; charset:utf-8');'在我的代碼中,我應該添加什麼? – Fred

回答

5

$test = "Nuñez"; 
echo $test; 

顯示努涅斯

您可以嘗試

$test = "Nuñez"; 
echo utf8_decode($test); 

$test = utf8_encode("Nuñez"); 
echo utf8_decode($test); 
+0

即使沒有像你建議的utf8編碼解碼那樣的修改,你的函數是否正確?這很奇怪......我的不是。順便說一句,我正在使用Firefox。我完全可以從這裏看到,而不是來自我自己的PHP文件。這些解決方案一次只能處理一個字符串,您是否知道整個頁面的解決方法? – Fred

+0

我測試了FF和IE中的代碼,它在兩者中都有相同的功能..你可能不得不改變你的頁面的字符編碼..檢查這個[w3.org鏈接改變字符編碼爲UTF-8](http:// www.w3.org/International/questions/qa-changing-encoding)如果有幫助.. –

+2

啊哈!謝謝..這是爲我做的!我從你提供的鏈接中得到了這個「如果你正在使用手工編輯的文件,那麼你應該使用你的編輯器以UTF-8格式保存文件」 – Fred

2

試試這個

它的作品適合我。

$test = "Nuñez"; 

echo html_entity_decode(htmlentities($test)); 
+0

yes的確如此。謝謝,但我很抱歉,我不清楚我的問題。我希望有一個「整頁」解決方案。 – Fred

+0

您是否想要在您的網站中使用此功能來支持多語言? – Hkachhia

+0

沒關係。事實證明,問題在於我通過Notepad ++以ANSI編碼保存我的文件,而不是使用UTF-8編碼。這是我所有問題的根源。您的解決方案也可以工作,因此您可以得到我的感謝和讚賞。 – Fred

1

當您連接到您的MySQL數據庫,設置字符集爲UTF-8,喜歡 - >

$sql_con = mysql_connect($sql_host, $sql_user, $sql_pass); 
mysql_query('SET NAMES utf8'); 
+2

'mysql_ *'已棄用! – Christoph

+1

是的,它和我的一樣,並且它爲我的查詢工作,謝天謝地! '$ mysqli = new mysqli('localhost','root','password','database');' '$ mysqli-> set_charset(「utf8」);'' – Fred

0

考慮設置DEFAULT_CHARSET,這個工作對我來說

的ini_set( 'DEFAULT_CHARSET', 'utf-8');