> Я не могу закодировать амперсанды до создания строки из-за характера этого проекта
Тогда у тебя не будет полного ответа.
Амперсанды ("&"
) разделяют параметры запроса в строках URL-запроса . У вас не может быть обоих способов, когда некоторые из ваших значений параметров запроса содержат неэкранированные "&"
и ожидают, что разборщик, основанный на этом простом правиле, узнает разницу.
Если вы не можете экранировать "&"
как "%26"
в каждом компоненте значения заранее, то вы никогда не сможете знать , что полученные вами значения верны. Лучшее, что вы можете сделать: если значение справа от "&"
и до следующего "&"
не не содержит знак равенства "="
, вы добавляете значение к предыдущему значению, считанному или пустая строка, если это первое прочитанное значение.
Для этого требуется правильный синтаксический анализатор, поскольку JavaScript не поддерживает предварительные регулярные выражения, которые могут помочь вам в этом.
Обратите внимание, что подобный алгоритм полностью обходит спецификацию. Предполагая на мгновение, что строка запроса:
a=test&b=cats & dogs&c=test
допустимо, технически эта строка содержит 4 параметров: "a"
(со значением "test"
), "b"
(со значением "cats "
), " dogs"
(с без значения) и "c"
(со значением "test"
).
Если вы не изменили строку запроса в источнике (и правильно экранировали компонент value), вы просто взломали неправильное решение.
Удачи.