Использование символа '#' в JavaScript функции window.open()

Привет всем! У меня возникла проблема при попытке открыть файл с символом ‘#’ в имени через функцию window.open() в JavaScript. Обычная ссылка работает нормально, но window.open() почему-то не справляется.

Я пробовал заменить ‘#’ на ‘%23’, но window.open() почему-то превращает это в ‘%2523’. Похоже, что функция дополнительно экранирует URL.

Кто-нибудь сталкивался с подобным? Есть ли способы обойти это двойное экранирование?

Вот пример кода, который я использую:

function обработатьСсылку(url) {
  return url.replace("#", "%23");
}

let путьКФайлу = '\\МойСетевойПуть\Документ#1-АБВГД.RTF';
window.open(обработатьСсылку(путьКФайлу));

При этом браузер пытается открыть ‘file://МойСетевойПуть/Документ%25231-АБВГД.RTF’ и говорит, что файл не найден. Помогите, пожалуйста, разобраться!

Слушай, с этой решёткой в юрлах вечно проблемы. Я обычно для таких случаев использую btoa() - он кодирует строку в base64. Потом на сервере декодируешь обратно. Типа так:

let encodedUrl = btoa(путьКФайлу);
window.open(‘handler.php?file=’ + encodedUrl);

А на сервере уже разбираешься с декодированием. Так точно ничего не поломается при передаче. Еще можно попробовать URL API, если твой браузер его поддерживает. Оно вроде умнее работает с урлами.

слушай, у меня была похожая проблема с хешами в урлах. в итоге помогло использование encodeURIComponent() вместо простой замены. попробуй так:

function обработатьСсылку(url) {
  return encodeURIComponent(url);
}

эта функция корректно закодирует все спецсимволы, включая решетку. еще можно попробовать decodeURIComponent() перед открытием, если браузер сам что-то экранирует:

window.open(decodeURIComponent(обработатьСсылку(путьКФайлу)));

надеюсь, это поможет решить проблему с двойным экранированием. дай знать, если получится!

Хм, а ты пробовал использовать encodeURI() вместо ручной замены? Оно вроде как специально для URL и не должно портить решётку. Типа:

let encodedPath = encodeURI(путьКФайлу);
window.open(encodedPath);

Если не поможет, можно ещё поиграться с options в window.open(), там есть всякие настройки. Может, дело в них?