我正在进行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);
答案 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的支持),现在它可以工作了..