У меня действительно возникают проблемы с пониманием спецификации и рекомендаций о том, как правильно экранировать и кодировать URL-адрес для отправки в карту сайта.
В примерах sitemap.org (выход из сущности) они имеют URL-адрес примера:
http://www.example.com/ümlat.php&q=name
Который, когда кодированный UTF-8 заканчивается как (в соответствии с ними):
http://www.example.com/%C3%BCmlat.php&q=name
Однако, когда я пытаюсь это (rawurlencode) на PHP, я получаю:
http%3A%2F%2Fwww.example.com%2F%C3%BCmlat.php%26q%3Dname
Я вроде как побил это с помощью этой функции, найденной на PHP.net
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40',
'%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%23', '%5B', '%5D');
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+",
"$", ",", "/", "?", "#", "[", "]");
$string = str_replace($entities, $replacements, rawurlencode($string));
но, по словам кого-то, с кем я говорил (Kohana BDFM), это толкование неверно. Честно говоря, я так растерялся, что даже не знаю, что правильно.
Как правильно кодировать URL для использования в карте сайта?
Соответствует RFC 3986