转义字符串中的转义符号

时间:2019-06-13 07:59:45

标签: javascript jquery html ajax string

我有一个序列化的字符串,该字符串将发送给服务器,如下所示:

SELECT
    WEEK(DateTime) AS week,
    AVG(Itemcount) AS item_avg
FROM db_dev.products
WHERE
    Type = 1 AND
    DateTime >= DATE_SUB(NOW(), INTERVAL 1 YEAR)
GROUP BY
    WEEK(DateTime);

我在这里面临的问题是用户添加的注释中有“#”符号。这导致查询字符串损坏,并且在控制器中的#之后我没有收到数据。甚至docId,ref和isEdit也被跳过。

谁能告诉我更好的解决方案。

我已经尝试了html转义notes字段,但是它没有转义#。

3 个答案:

答案 0 :(得分:1)

您可以在注释值上使用encodeURIComponent(并且只能在此特定值上使用,否则将无法解析其他参数)-它会转义主题标签。 请参阅有关MDN的文档:https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/encodeURIComponent

答案 1 :(得分:1)

#是在URI(统一资源标识符)中时需要编码的字符,因为它通常用于显示已选择/定向到的ID。

您可能会在地址栏中的URI末尾看到一个#,然后在页面的后面可以看到一个元素的ID,例如Lodash docs(_.uniqBy例如,您可以使用内置的encodeURIComponent函数对其进行编码。经过编码后,它看起来像%23

console.log(encodeURIComponent("#"));

您还可以通过以下方式对完整URI进行编码:

console.log(encodeURIComponent("counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true"));

答案 2 :(得分:0)

尝试一下

let url = "counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2&notes=2332#fdsf&docId=0&ref=3232&isEdit=true";
url.replace("#","%23");

然后将其发送到服务器将使用保留字符的ascii值