The + as a space in a URL often originates from form data submitted via GET (the wisdom of which is a separate topic for discussion). At least we've gotten to the point now where we've pretty much dispensed with nested hierarchies of framesets, in which the "percent" encoding needed to be done multiple times to different parts of the URL so each target could decode its source and dispatch an appropriately-encoded source to its descendants, yielding %25252520 and other similar monstrosities.
You can use an encoded target=frame to pass it down as many levels as you want (encode the ampersand and the equals sign, and of course the percent sign for things that arent at the immediate child level). The '90s sucked for web dev, but there was almost always a (scary and hackish) way.
But which mechanism would do the substitution of those parameters in the HTML of the child frame? I still fail to see how it would be done without either Javascript or server-side code. (And I did web dev in the 90s, with frames, but apparently was not evil enough to think of such stuff.)