encodeURIComponent () игнорирует разрывы строк - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь закодировать строку из текстовой области, чтобы я мог вывести закодированный результат для ссылки mailto.Пробелы и специальные символы кодируются нормально, а разрыв строки - нет, они просто кодируются как пробел.Как мне закодировать разрывы строк?

if (id == 'subject' || id == 'body') {
            let str = output.innerText;
            str = encodeURIComponent(str);
            // str = str.replace(/\n/g, "%0A").replace(/ /g, "%20").replace(/&/g, "%26");
            output.innerText = str;
        }

Я также пробовал это, что тоже не работает:

str = encodeURIComponent(str).replace(/\n/g, '%0D%0A');

Вот как выглядит мой вывод:

mailto:mckeever02@gmail.com?body=Testing%20Should%20be%20a%20line%20break%20before%20this%20sentence

Обратите внимание, что разрывы строк просто кодируются в %20 (пробел).Есть идеи?

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Разрывы строк заменяются на %0A. Получить текст из текстовой области с value, а не innerHTML / innerText

const ta = document.getElementById("ta");
const val = ta.value;

console.log(encodeURIComponent(val));
<textarea id="ta">
First line
Second line
</textarea>
0 голосов
/ 16 января 2019

Смотрите мой пример фрагмента. Я просто читаю данные из textarea, используя innerHtml, чтобы иметь новые доступные строки и использовать простой encodeURIComponent. Новые строки переносятся в %0A, а пробелы в %20

Возможно, ваша проблема заключалась в использовании innerText вместо innerHTML. innerText без новых строк.

const text = document.querySelector('textarea').innerHTML;
console.log(encodeURIComponent(text))
<textarea>
Test
aaaa
bbbb ccc
dddd
</textarea>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...