2013-01-22 33 views
1

我做一個AJAX調用,並在AJAX處理程序代碼(PHP側)我必須返回一個包含貨幣符號的字符串。我有€開始於PHP端,我嘗試使用html_entity_decode()進行編碼,但當我提醒javascript部分中的響應時,我得到了€HTML實體 - 讓€而不是€

我做的價值html_entity_decode()返回PHP中的AJAX響應之前 -

$currency = "€"; //I am getting this from somewhere so I cannot change it. 
echo json_encode(array("message" => htmlentity_decode($currency))); 

但還是它顯示€當我提醒使用JavaScript。

即使當我看着Firebug控制檯,它顯示€

我也查了,在非AJAX的情況下,對於一個普通的PHP頁面,如果我回應下面,我得到預期 -

$currency = "€"; 
htmlentity_decode($currency); 

所以,我缺少的是在這裏。我需要使用header()設置一些與角色相關的東西嗎?我想這一點 -

header("Content-Type: charset=UTF-8;");

我還檢查Html entities like € is not converted to its symbol in CSV conversion

更新

注:我已嘗試設置$貨幣= 「€」,但設置的 「消息」 屬性迴應null。在Firebug控制檯輸出的響應表明這一點 -

{"message":null} 

更新2

我使用jQuery。

我做些什麼反應?

我只是像這樣顯示的確認消息的響應 -

if(confirm(res.message)){alert("confirmed")}. //this renders html entities (€), I want this to render € 

我檢查,如果我追加在UI的東西的反應,顯示歐元符號€ - $('.jqModal').append(res.message);

+1

你確定你有'''?您是否檢查過您瀏覽過的瀏覽器頁面的「來源」?注意瀏覽器會騙你並且渲染實體,而不會在html模式下顯示它們的原始內容。 –

+0

@Mark,是的,我從源頭上驗證我得到了一個普通的PHP頁面(非AJAX的情況)。 –

+0

這只是一個想法:你使用jQuery?因爲jQuery有一些方法(例如['.text()'](http://api.jquery.com/text/)將特殊字符轉換爲它們的html實體。「 – Carsten

回答

0

我檢查通過不使在PHP端的任何變化,並明確在JavaScript端進行解碼的HTML實體,接收響應後,問題得到解決。我加了這個javascript函數html_entity_decode()(phpjs。org/functions/html_entity_decode),然後在提醒響應之前調用它,但這也不起作用(然後我在該函數中添加了對歐元的支持),現在它可以工作..

1

你問題不在於htmlentity_decode($currency)部分,而在於json_encode部分。這會使你的歐元符號重新變成一種時髦。

你可以使用json_encode($currency, JSON_UNESCAPED_UNICODE)強制使用的實際€符號的,但我個人認爲你是與發送HTML實體更好。由於某些瀏覽器會將該代碼視爲無效代碼,並且會得到意想不到的結果。

+0

我檢查,通過不做任何改變,在PHP端,明確解碼HTML端的JavaScript實體,收到迴應後,問題得到解決。我添加了這個javascript函數'html_entity_decode()'(phpjs.org/functions/html_entity_decode)並在提醒響應之前調用它,但這也不起作用(然後我在該函數中添加了對Euro的支持),現在它工作。 –

相關問題