encodeURIComponent()忽略换行符

时间:2019-01-16 11:45:46

标签: javascript encoding character-encoding

我正在尝试对文本区域中的字符串进行编码,以便可以输出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 :(得分:2)

将换行符替换为%0A。使用value而非innerHTML / innerText从textarea获取文本

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

console.log(encodeURIComponent(val));
<textarea id="ta">
First line
Second line
</textarea>

答案 1 :(得分:1)

请参阅我的示例代码段。 我只是使用innerHtml从textarea读取数据以提供新行并使用简单的encodeURIComponent。新行将转移到%0A,空格将转移到{ %20

可能您的问题是使用innerText而不是innerHTML。 innerText没有换行。

const text = document.querySelector('textarea').innerHTML;
console.log(encodeURIComponent(text))
<textarea>
Test
aaaa
bbbb ccc
dddd
</textarea>