As .
is potentially dangerous on the backend, both for URL and filenames, there are indeed sanitizers, like this one.
However, there is no standardized encoder / decoder to preserve meaning / uniqueness for URL and filenames. Why is that?
decodeURIComponent
, escape
or even (s) => { el.innerText = s; return el.innerHTML }
all wouldn't change .
Edit:
The fastest and simplest way to escape this is simply
'~' + s
(and decode withp.replace(/^~/, '')
).
Top comments (6)
What is the meaning you want to preserve?
app.get('/:param')
Actually,
/^\.{1,2}$/
and/^(?:%2E){1,2}$/i
will not survive browser's URL constructor, and always disappear.req.query
,req.body
, or evenURL#search
seem to have no restrictions, even if you encode it with onlyencodeURIComponent
.Yeah, that's conforming to RFC 3986 Section 5.2
But as I said,
None if these helps.
For conformance to RFC 3986, single and double dot segments are recognized as relative path and resolved as such. What other meaning do you want to give them? What's your worry?
NVM. As long as dot is prefixed (perhaps with
~
as it will never be URI-encoded), it seems to work.