2014-02-27 1 views
0

Используя 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 =" является закодированной строкой.

+0

Заданное значение вертикальной полосы (трубы) составляет% 7C. Я не знаю, как вы получаете% 257C как char. Для получения дополнительной информации о [ASCII CODE] (http://www.ascii-code.com/). – Braj

+1

@Braj Я предполагаю, что '% 25'' '' '' '' ', поэтому' | 'кодируется один раз'% 7C', а дважды закодировано - '% 257C'. –

+0

Да. 25 - знак процента. И если это была проблема, это не сработало бы в любом браузере, что не так. – Troncoso

ответ

0

Для того, чтобы убедиться, что IE сохранил кодировку в такт, я должен был первым декодировать URL, как только я установил его:

public void setValue(String value) 
{ 
    this.value = unescape(value); 
} 

private static native String decodeURI(String s) 
/*-{ 
    return decodeURI(s); 
}-*/; 

Большое спасибо за помощь!

0

Попробуйте JavaScript encodeURIComponent() Функция для кодирования строки. Эта функция делает переносную строку, поэтому ее можно передавать по любой сети на любой компьютер, поддерживающий символы ASCII.

Эта функция кодирует специальные символы.

Кроме того, он кодирует следующие символы: ,/? : @ & = + $ #


Для получения дополнительной информации нажмите HERE.

Вот пример кода с использованием JSNI:

public static final native String encodeURIComponent(String uri) /*-{ 
    return encodeURIComponent(uri); 
}-*/; 
+0

Это шаг в правильном направлении! Когда я убегаю от своего url, он дает мне «3% 25257C1000». Я не уверен, почему он добавляет второй 25. – Troncoso