UTF-8 кодирует URL - PullRequest
       34

UTF-8 кодирует URL

5 голосов
/ 23 мая 2011

Информация:

У меня есть программа, которая генерирует карты сайта XML для Инструментов Google для веб-мастеров (среди прочего).
GWT дает мне ошибки для некоторых карт сайта, потому что URL содержат последовательности символов, такие как ã¾, ã ‹, ã € и т. Д. **

GWTs говорит:

Мы требуем, чтобы ваш файл Sitemap был в кодировке UTF-8 (обычно вы можете сделать это при сохранении файла). Как и во всех XML-файлах, любые значения данных (включая URL-адреса) должны использовать escape-коды объектов для символов: & , ', ", < , > .

Специальные символы выделяются в файлах XML (с сущностями HTML).
Фрагмент XML-файла:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://domain/folder/listing-&#227;&#129;.shtml</loc>
        ...

Зашифрованы ли мои URL в кодировке UTF-8?

Если нет, Как мне это сделать в Java ?
Следующая строка в моей программе, где я добавляю URL в карту сайта:

    siteMap.addUrl(StringEscapeUtils.escapeXml(countryName+"/"+twoCharFile.getRelativeFileName().toLowerCase()));

** = Я не уверен, какие из них вызывают ошибку, вероятно, первые два примера.

Я прошу прощения за все редактирование.

Ответы [ 4 ]

16 голосов
/ 23 мая 2011

Попробуйте использовать URLEncoder.encode(stringToBeEncoded, "UTF-8") для кодирования URL.

2 голосов
/ 27 мая 2011

Не путайте процентное кодирование не-ASCII-символов в URL-адресах с XML -элементами экранируется символов в URL-адресах.При создании файлов Sitemap для XML вам нужно сделать и то, и другое.

Честно говоря, после прочтения вашего исходного поста происходит нечто странное, потому что символы, о которых вы упомянули, напоминают мне о неудачном преобразовании:)

Вы уверены, что эти символы действительно являются частью ваших URL при использовании UTF-8?

2 голосов
/ 23 мая 2011

URL должны быть закодированы в процентах согласно спецификации URI .

Например, кодовая точка U + 00e3 (ã) станет закодированной последовательностью %C3%A3.

Когда в XML-документе создается URI, он должен соответствовать требованиям разметки для XML.

Например, URI http://foo/bar?a=b&x=%C3%A3 становится http://foo/bar?a=b&amp;x=%C3%A3.Амперсанд - это escape-символ в XML.

Подробное обсуждение кодировки URI можно найти здесь .

1 голос
/ 23 мая 2011

Все не-ascii символы в URL должны быть в кодировке x-url-кодировки.

Вот ссылка на вики, которая объясняет это: http://en.wikipedia.org/wiki/Percent-encoding.

Кроме того, все специальные символы XML (&, >, <, etc.) также должны быть экранированы.

Ответ Джая показывает правильный метод x-url-кодирования произвольной строки. Однако обратите внимание, что он не выполняет экранирование XML.

...