Есть ли способ избежать специальных символов с кодированием, применяемым только в строке запроса URL? - PullRequest
0 голосов
/ 08 ноября 2019

Элемент, о котором идет речь, является полем формы textarea. Строка запроса, которую я добавил к URL-адресу, отлично работает везде, кроме текстовой области. Если я введу «Жизнь трудна» в поле textarea формы один, оно заполнит поле textarea в целевой форме следующим образом: «Life% 20is% 20hard» Есть ли способ избежать пробелов после или после их добавления БЕЗ кодированиячто-нибудь вне плагина UX? Мол, прямо в строке запроса или параметрах?

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

URL будет закодирован сам по себе,% 20 - это то, как работает.

Короткий путь:

decodeURI(str)

или попробуйте с:

document.write(unescape(str))
0 голосов
/ 08 ноября 2019

Содержимое строки запроса: всегда в кодировке URI, что означает, что при его использовании всегда необходимо его URI-декодировать. Предполагая, что ваша строка запроса использует обычную форму name=value&name=value:

const entries = queryString.split("&").map(
    entry => entry.split("=").map(
        part => decodeURIComponent(part)
    )
);

entries теперь является массивом массивов [key, value] с содержимым строки запроса, правильно декодированным для использования (например, заполнениев textarea).

Пример:

const queryString = "this=that&a=b&text1=Life%20is%20good&x=y";

const entries = queryString.split("&").map(
    entry => entry.split("=").map(
        part => decodeURIComponent(part)
    )
);
for (const [name, value] of entries) {
    if (name === "text1") {
        document.getElementById(name).value = value;
    } else {
        console.log(`Value for ${name}: ${value}`);
    }
}
<textarea id="text1"></textarea>

Если строка запроса не в name=value форме, если это просто то, что вы хотите в текстовой области, это скореепроще:

theTextArea.value = decodeURIComponent(queryString);

Пример:

const queryString = "Life%20is%20good";

document.getElementById("text1").value = decodeURIComponent(queryString);
<textarea id="text1"></textarea>
...