【问题标题】:How to prevent strings getting cut at the # sign?如何防止字符串在#号处被切断?
【发布时间】:2018-09-10 10:13:33
【问题描述】:

我正在创建一个社交网络,我想加入#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();
    });
});

【问题讨论】:

  • 如果要发送实际的POST数据,需要$.post('/Logic/postStory', { text: post }, function(result) { ... })

标签: javascript jquery model-view-controller


【解决方案1】:

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

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

对您在 URL 查询字符串中输入的 any 值执行此操作很重要。 (事实上​​,也应该使用键,但 encodeURIComponent("text")"text",因此您可以不用为特定键以及仅由字母和数字组成的任何其他键进行操作。)

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


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

【讨论】:

    【解决方案2】:

    发生这种情况是因为 URL 中的 # 符号被解释为所谓的 named anchor。尝试像这样对 URL 进行编码:

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

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

    【讨论】:

      【解决方案3】:

      # 应替换为%23

      详情请查看HTML URL Encoding Reference

      您可以使用encodeURIComponent 对请求进行编码,或者只需在代码中将# 替换为%23

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

      【讨论】:

        猜你喜欢
        • 2011-08-15
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多