欧元符号的Html实体显示在AJAX响应而不是实际的欧元符号 - 获得€而不是€

时间:2013-01-22 15:05:45

标签: php javascript ajax html-entities

我正在进行AJAX调用,在AJAX处理程序代码(PHP方面)中,我必须返回一个包含货币符号的字符串。我在PHP方面开始€,我尝试使用html_entity_decode()进行编码,但是当我在javascript部分中提醒响应时,我得到€

在PHP中返回AJAX响应之前,我做了html_entity_decode()的值 -

$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

更新

注意:我尝试设置$ currency =“€”,但这会将响应的“message”属性设置为null。 firebug控制台输出中的响应显示了这个 -

{"message":null}

更新2

我使用jQuery。

我对回复做了什么?

我只是在这样的确认消息中显示响应 -

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

我检查过,如果我将回复附加到用户界面中的内容,则会显示欧元符号 - $('.jqModal').append(res.message);

2 个答案:

答案 0 :(得分:1)

您的问题不在于htmlentity_decode($currency)部分,而在于json_encode部分。这将使您的欧元符号恢复正常。

您可以使用json_encode($currency, JSON_UNESCAPED_UNICODE)强制使用实际的€符号,但我个人认为您最好发送html实体。由于某些浏览器会将其视为无效代码,因此您将获得意外结果。

答案 1 :(得分:0)

我通过不在PHP端进行任何更改并在javascript端显式解码HTML实体来检查,在收到响应后,问题得到解决。我添加了这个javascript函数html_entity_decode()(phpjs.org/functions/html_entity_decode)并在提醒响应之前调用它,但是这也没有用(然后我在该函数中添加了对Euro的支持),现在它可以工作了..