@Avreliya777

Как кодировать ссылки для Sitemap на php?

В спецификации ( https://www.sitemaps.org/ru/protocol.html ) пишут о utf-8, значит по идее есть поддержка всех utf-8 символов, т.е. пробелы не кодируем? Правильно ли будет так:
<loc>https://domen.ru/search?q=раз два</loc>

В то же время там говорится о маскировании символов &' " > <
т.е. с запросом "that's right" делать что-то вроде:
<loc>https://domen.ru/search?q=that&#039;s right</loc>

Т.е. прогнав, например, через напр. через htmlspecialchars или htmlentities.
Правда обе функции переводят тот же апостроф в &#039;
а по спецификации требуется &apos; Ну то ладно, можно str_replace обойтись.

Ещё многие пишут что поисковики у них не принимают ссылки с пробелами и предлагают сомнительные части URL'а оборачивать в urlencode (некоторые пишут обязательно в rawurlencode, чтобы иметь %20 вместо пробела, а не +).
Т.е. на запрос "раз два" должны получить нечто вроде:
<loc>https://domen.ru/search?q=%D1%80%D0%B0%D0%B7%20%D0%B4%D0%B2%D0%B0</loc>

Что будет с более длинными названиями, страшно представить)) хотя в спецификации говорится о допустимых 2048 символах, так что запаса вполне достаточно.

Как всё же порекомендуете кодировать ссылки (ту часть, что с запросом или названием статьи)?
htmlspecialchars? htmlentities? str_replace? urlencode? rawurlencode?
С учётом, что транслитерация и перевод в url_slug не подходит.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
оборачивайте query параметры в rawurlencode()

&#039; не правильно и должно быть %27

urlencode тоже можно использовать, поисковики без проблем принимают как вариант с "%20" так и с "+"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы