2014-02-20 3 views
0

Вот строку, я кодирование в JavaScript с использованием encodeURIКодирование/декодирование "и" в качестве параметра URL

Оригинал String - авторское право = Copyright © 2003

Это закодированный String - Copyright% 20% C2% A9% 202003

Я передаю этот текст со ссылкой, например www://abc.com?param=Copyright%20%C2%A9%202003, которая, в свою очередь, открывает всплывающее окно javascript.

Но когда я декодирую эту строку на всплывающей странице, в IE10 она приходит как «Copyright © 2003», где, как и в Chrome & Firefox, она отображается как «Copyright © 2003».

Я понимаю, что IE не отображает этот специальный символ © правильно и для этого нам нужно использовать "&copy". Но почему-то я не могу отправить "&copy" в качестве параметра, как он относится к "&copy" как сама новый параметр, как он начинается с "&"

Не могли бы вы, пожалуйста, дайте мне знать, как правильно кодировать/декодировать этот текст корректно через IE с помощью JavaScript.

+1

Смотрите здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent – elclanrs

+0

Человек обычно нуждается в 'encodeURIComponent' вместо' encodeURI', например, '' & и '=' в URI одобрены, но вызовут проблемы, если вы конкатенируете строку с ними в компоненте, поскольку они могут быть интерпретированы как новые параметры. –

+0

Я не хочу кодировать «www.abc.com», а хочу только кодировать параметр, и поэтому я кодирую его с помощью encodeURI. – Ansuman

ответ

0

Использовать encodeURIComponent по параметру, который вы отправляете (и decodeURIComponent на другом конце) вместе с соответствующим метатегом (ниже - более простой, но все же обратный и удобный для HTML5) и кодирование документов. Это позволит избежать таких вещей, как & и =, которые в противном случае могут рассматриваться как разделители параметров.

Вот IE10 и FF27 испытания демо:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
</head> 
<body> 

<script> 

var testString = '\u00a9'; // Show the copyright symbol by default 
       // though you can test with "&" and "=" in here as well 
var loc = window.location.href; 
if (loc.indexOf('param=') === -1) { // Add the param if not present 
    window.location += '?param=' + encodeURIComponent(testString); 
} 

// Show the symbol after the param (in a safe manner). 
document.body.appendChild(document.createTextNode(
    decodeURIComponent(loc.replace(/.*?\?param=/, '')) 
)); 
</script> 

</body> 
</html> 
1

Использование HTML сущностей, как &copy; действительна только для экранирования специальных символов в HTML. Неправильно отправлять его в качестве параметра URL-адреса.

Проблема заключается в том, что браузер использует кодировку UTF-8 для хранения строк, а символ © хранится в виде 2-байтовой последовательности с кодировкой %C2%A9 в URL-адресе. Страница, которая декодирует URL-адрес, похоже, не использует UTF-8 и декодирует 2 байта как 2 отдельных символа ©.

Пока вы не укажете браузеру, который настроил персонаж, он может выбрать то, что, по его мнению, является лучшим вариантом. Firefox и Chrome, похоже, предпочитают UTF-8 и правильно кодируют и декодируют строку. Internet Explorer 10, кажется, выбирает другой набор символов на каждой странице.

Вы должны убедиться, что все страницы имеют

<meta http-equiv="content-type" content="text/html; charset=UTF-8"> 

тег в заголовке HTML. Это обычно говорит браузеру, который кодирует для строк, и должен исправить проблему с кодировкой и расшифровкой символов, отличных от ASCII, в URL-адресах.

Смежные вопросы