Используя GWT, у меня есть webapp, и на определенной странице он вытягивает параметр из URL-адреса, который имеет кодировку канала (|). Так, например, полный URL будет (в режиме разработчика):Internet Explorer не обрабатывает html-кодировку в URL-адресе (GWT)
http://127.0.0.1:8888/Home.html?gwt.codesvr=127.0.0.1:9997#DynamicPromo:pk=3%257C1000
и когда я тяну параметр «рк» я должен получить «3 | 1000». (% 257C - закодированный пиковый знак)
Ну, это прекрасно работает в Firefox и Chrome.
В IE (я использую 11), я получаю «3% 7C1000», когда я вытягиваю параметр. По какой-то причине IE отбрасывает 25 в закодированном символе, а это значит, что это больше не символ канала, а мое приложение разбивается.
Я читал и обнаружил, что проблемы с кодировкой распространены в IE. В частности, я нашел эту страницу: http://support.microsoft.com/kb/928847
Это предлагаемые решения включают в себя:
- отключить Auto-Select настройки в обозревателе Internet Explorer.
- Укажите набор символов в заголовках HTTP.
- Переместите метку META в пределах первого килобайта данных, который разобран по MSHTML.
Я пробовал эти 3, и это не помогло. Вот начало моего home.html:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
Другие два предложения:
- увеличить размер первоначального ответа HTTP сервера. Начальный размер должен составлять не менее 1 КБ.
- Убедитесь, что параметр «Язык системы» соответствует набору символов тега META, указанному на странице HTML.
Я не чувствую, что ничего не сделаю. Мои настройки языка системы верны. И поскольку мои метатеги находятся в начале документа, они находятся в пределах первого килобайта данных, поэтому они будут прочитаны в первую очередь. Поэтому я не понимаю, почему мне нужно увеличить размер ответа HTTP.
Итак, мне нужно, чтобы IE правильно прочитал этот закодированный символ, чтобы веб-приложение работало правильно. Есть ли у кого-нибудь другие предложения, которые я мог бы попробовать?
UPDATE:
Как URL закодирован:
URL.encodePathSegment(place.getValue())
Где URL от пакета com.google.gwt.http.client
ПолучитьЗначение() установлено от этого:
public static String encodePk(PrimaryKey pk)
{
if(pk != null)
{
return String.valueOf(pk.getPk()).concat("|").concat(String.valueOf(pk.getCpk()));
}
else{
return "";
}
}
конечным результатом является URL, который я разместил в верхней части:
http://127.0.0.1:8888/Home.html?gwt.codesvr=127.0.0.1:9997#DynamicPromo:pk=3%257C1000
Если часть после слова "pk =" является закодированной строкой.
Заданное значение вертикальной полосы (трубы) составляет% 7C. Я не знаю, как вы получаете% 257C как char. Для получения дополнительной информации о [ASCII CODE] (http://www.ascii-code.com/). – Braj
@Braj Я предполагаю, что '% 25'' '' '' '' ', поэтому' | 'кодируется один раз'% 7C', а дважды закодировано - '% 257C'. –
Да. 25 - знак процента. И если это была проблема, это не сработало бы в любом браузере, что не так. – Troncoso