Подтвердить что ты не робот

Как правильно закодировать следующий URL-адрес с помощью 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)

Я пробовал encodeURI или encodeURIComponent, но все еще имею проблему с "#" . Если я вручную заменим "#" на "% 23", то по какой-то причине код будет закодирован снова. Является ли jQuery attr() заготовкой какой-либо кодировки вообще?

ИЗМЕНИТЬ Попытка побега дает

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
4b9b3361

Ответ 1

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

Ответ 2

Согласно Firebug:

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

Какие у вас проблемы с "#"?

Ответ 3

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);

Ответ 4

encodeURIComponent отлично работает для меня. мы можем указать url как это в ajax-вызове. Код, показанный ниже:

$.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) {
            }
        });