【问题标题】:Character "d' " becoming " d' " when displayed显示时字符“d'”变为“d'”
【发布时间】:2017-07-06 16:51:45
【问题描述】:

所以我从 AJAX 中的 API 请求中得到了这个地址 7 rue la Tour d'Auvergne。

但是当我将它提供给我的视图中的输入时,甚至只是像这样显示它

get_adress.js.erb

alert('<%= @sellsy_address.address %>')
$('#address').val('<%= @sellsy_address.address unless @sellsy_address.blank? %>');

我收到了这个7 rue la Tour d&amp;#39;Auvergne

知道如何保持d' 的原样吗?我尝试以不同的方式对其进行编码或解码,但没有结果。

提前致谢

编辑

如果我使用 html_safe 的 raw,我的 js.erb 将不再加载

【问题讨论】:

标签: javascript jquery ruby-on-rails character-encoding utf


【解决方案1】:

尝试将html_safe 与escape_javascript(或j)一起使用,如下所示:

alert('<%= j @sellsy_address.address.html_safe %>');

或者,您可以跳过j,但将单引号更改为双引号,如下所示:

alert("<%= @sellsy_address.address.html_safe %>");

如果我使用 html_safe 的 raw,我的 js.erb 将不再加载

那是因为' 中的' 在单引号内导致语法错误。检查以下示例;

单引号,不带escape_javascript(或j)

alert('<%= @sellsy_address.address.html_safe %>');

//generated code:
alert('7 rue la Tour d'Auvergne');

如您所见,警报获取字符串 '7 rue la Tour d',然后需要一个右括号 ()),因此您会收到一个错误并显示没有警报。

单引号,带有escape_javascript(或j)

alert('<%= j @sellsy_address.address.html_safe %>');

//generated code:
alert('7 rue la Tour d\'Auvergne');

现在' 已被转义,不再是结束引号,因此警报已正确显示。

双引号,不带escape_javascript(或j)

alert("<%= @sellsy_address.address.html_safe %>");

//generated code:
alert("7 rue la Tour d'Auvergne");

这次' 不需要转义,因为字符串用双引号 ('" "') 括起来,这样可以避免与单引号 (') 发生任何冲突。

【讨论】:

  • 有效!没有 j 我的 js.erb 甚至不会加载,并且警报永远不会弹出。 j 代表什么?
  • @LRP 检查更新的答案以澄清您的问题。
  • 知道了。感谢您花时间澄清。
猜你喜欢
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 2021-03-09
  • 1970-01-01
  • 2013-05-09
  • 2023-02-11
  • 1970-01-01
相关资源
最近更新 更多