如何正确使用Javascript或jQuery对以下URL进行编码?

时间:2010-11-17 05:27:10

标签: javascript jquery

我想要做的就是正确编码以下链接,但出于某种原因“#”给我一个问题:

var text = "hello, how are you? &am fine"
var link = "http://example.com/test#zzzzzzzzz"


url = "http://twitter.com/share?url=" + link + "&text" + text;
$("#twitter a").attr("href", url)

我尝试了encodeURIencodeURIComponent,但仍然遇到“#”问题。如果我手动将“#”替换为“%23”,则由于某种原因,代码会再次编码。 jQuery attr()是否会执行任何编码?

EDIT 尝试逃生产生

http://twitter.com/share?url=http%253A//example.com/test%2523zzzzzzzz

不确定“%25”来自哪里,而不仅仅是%23

执行encodeURIComponent后,使用$("#twitter a").attr("href", url)生成以下内容。 %25来自哪里?

http://twitter.com/share?url=http%253A%252F%252Fexample.com%252Ftest%2523zzzzzzzz

4 个答案:

答案 0 :(得分:21)

encodeURIComponent 应该适合您

var text = "hello, how are you? & fine";
var link = "http://example.com/test#zzzzzzzzz";

var url = "http://twitter.com/share?url=" + encodeURIComponent(link) + "&text=" + encodeURIComponent(text);

$('#twitter a').attr('href', url);

jsFiddle example

答案 1 :(得分:1)

encodeURIComponent不是“完整”,您可以使用这样的自定义函数(取自http://phpjs.org/functions/urlencode/):

function encode(toEncode) {
    return encodeURIComponent(toEncode)
        .replace(/!/g, '%21')
        .replace(/'/g, '%27')
        .replace(/\(/g, '%28')
        .replace(/\)/g, '%29')
        .replace(/\*/g, '%2A');
}

示例:     var url = encode(url_plain_text);

答案 2 :(得分:0)

据Firebug说:

>>> encodeURIComponent("http://example.com/test#zzzzzzzzz")
"http%3A%2F%2Fexample.com%2Ftest%23zzzzzzzzz"

你对“#”有什么问题?

答案 3 :(得分:0)

encodeURIComponent 对我来说很好。我们可以在ajax调用中给出这样的url。代码如下所示:

$.ajax({
            cache: false,
            type: "POST",
            url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
            data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
            dataType: "HTML",
            success: function (data) {
            },
            error: function (xhr, ajaxOptions, thrownError) {
            }
        });