Согласно этому вопросу , многие символы (#, <,>, [,], {,}, ...) должны быть запрещены во фрагментах URL (то есть в части URL)после #).Но написанный мной тестовый скрипт, похоже, указывает, что большинство современных браузеров допускают некоторые из этих символов:
const unsupported = [];
for (let charCode = 32; charCode < 127; charCode++) {
const c = String.fromCharCode(charCode);
window.location = `#${c}`;
const afterRoundtrip = window.location.href.match(/#(.*)/)[1];
const characterIsSupported = afterRoundtrip === c;
if (!characterIsSupported) {
unsupported.push(c);
}
}
console.log('Unsupported: ', unsupported);
Этот скрипт выполняет итерацию по всем печатным символам ASCII, пытается добавить каждый из них в URL после хэша, читает егоназад и выводит символы, которые браузер не разрешал.
В Chrome вывод был [" ", """, "<", ">", "`"]
;как на Safari, так и на Edge это было [" "]
.Поэтому кажется, что почти все символы ASCII разрешены в фрагментах URL.
Я в замешательстве: должны ли браузеры разрешать все эти специальные символы в фрагментах URL?Если да, могу ли я полагаться на это поведение и использовать эти символы для одностраничных приложений?Есть какой-то стандарт, о котором я не знаю?