如何防止字符串在#符号处被割断?

时间:2018-09-10 10:13:34

标签: javascript jquery model-view-controller

我正在创建一个社交网络,我想包含#hashtag功能...问题是#处的帖子被剪掉了。例如,如果我写了“ Hello #StackOverflow community!”,结果字符串将是“ Hello”。下面是代码和调试屏幕截图。

$("#btnPostStatus").click(function () {
    var post = $("#txtNewStatus").val();
    $.post('/Logic/postStory?text=' + post.toString() + '', null, function(result) {
        alert(result);
        location.reload();
    });
});

3 个答案:

答案 0 :(得分:1)

通过encodeURIComponent对它们进行正确编码:

'/Logic/postStory?text=' + encodeURIComponent(post)

对于您在URL查询字符串中输入的任何值,这样做很重要。 (实际上,键也应该完成,但是encodeURIComponent("text")"text",因此您可以不必为特定的键和其他仅由字母和数字组成的键不这样做。) / p>

还请注意,.toString()上的post+ ''都是不必要的。


请注意,您要在网址中添加text参数 (例如,像GET参数一样),而不是将其作为POST数据。如果确实要这样做,那很好,但是如果您打算将其包括在POST数据中,则需要将其作为第二个参数提供:$.post('/Logic/postStory', {text: post}, ...)。 (而且,如果您以这种方式传递它,则作为对象,jQuery将为您完成URI编码。)

答案 1 :(得分:0)

之所以会这样,是因为URL中的#符号被解释为所谓的named anchor。尝试像这样对URL进行编码:

$.post('/Logic/postStory?text=' +  encodeURIComponent(post.toString()), ...

顺便说一句,+ ''在您的情况下不是必需的。

答案 2 :(得分:0)

#应该替换为%23

请检查HTML URL Encoding Reference以获得更多详细信息。

您可以使用encodeURIComponent或通过在代码中将#替换为%23来简单地编码请求。

我建议对整个URL进行编码。

相关问题