我有一个序列化的字符串,该字符串将发送给服务器,如下所示:
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字段,但是它没有转义#。
答案 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¬es=2332#fdsf&docId=0&ref=3232&isEdit=true"));
答案 2 :(得分:0)
尝试一下
let url = "counter=1&Id=4&type=2332&amount=3232&gstIncluded=3232&paymentMethod=2¬es=2332#fdsf&docId=0&ref=3232&isEdit=true";
url.replace("#","%23");
然后将其发送到服务器将使用保留字符的ascii值