В спецификации (
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's right</loc>
Т.е. прогнав, например, через напр. через
htmlspecialchars или
htmlentities.
Правда обе функции переводят тот же апостроф в
'
а по спецификации требуется
'
Ну то ладно, можно
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 не подходит.