A html space is showing as %2520 instead of %20 - html

Passing a filename to the firefox browser causes it to replace spaces with %2520 instead of %20.
I have the following HTML in a file called myhtml.html:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
When I load myhtml.html into firefox, the image shows up as a broken image. So I right click the link to view the picture and it shows this modified URL:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
What the heck? It converted my space into a %2520. Shouldn't it be converting it to a %20?
How do I change this HTML file so that the browser can find my image? What's going on here?

A bit of explaining as to what that %2520 is :
The common space character is encoded as %20 as you noted yourself.
The % character is encoded as %25.
The way you get %2520 is when your url already has a %20 in it, and gets urlencoded again, which transforms the %20 to %2520.
Are you (or any framework you might be using) double encoding characters?
Edit:
Expanding a bit on this, especially for LOCAL links. Assuming you want to link to the resource C:\my path\my file.html:
if you provide a local file path only, the browser is expected to encode and protect all characters given (in the above, you should give it with spaces as shown, since % is a valid filename character and as such it will be encoded) when converting to a proper URL (see next point).
if you provide a URL with the file:// protocol, you are basically stating that you have taken all precautions and encoded what needs encoding, the rest should be treated as special characters. In the above example, you should thus provide file:///c:/my%20path/my%20file.html. Aside from fixing slashes, clients should not encode characters here.
NOTES:
Slash direction - forward slashes / are used in URLs, reverse slashes \ in Windows paths, but most clients will work with both by converting them to the proper forward slash.
In addition, there are 3 slashes after the protocol name, since you are silently referring to the current machine instead of a remote host ( the full unabbreviated path would be file://localhost/c:/my%20path/my%file.html ), but again most clients will work without the host part (ie two slashes only) by assuming you mean the local machine and adding the third slash.

For some - possibly valid - reason the url was encoded twice. %25 is the urlencoded % sign. So the original url looked like:
http://server.com/my path/
Then it got urlencoded once:
http://server.com/my%20path/
and twice:
http://server.com/my%2520path/
So you should do no urlencoding - in your case - as other components seems to to that already for you. Use simply a space

When you are trying to visit a local filename through firefox browser, you have to force the file:\\\ protocol (http://en.wikipedia.org/wiki/File_URI_scheme) or else firefox will encode your space TWICE. Change the html snippet from this:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
to this:
<img src="file:\\\C:\Documents and Settings\screenshots\Image01.png"/>
or this:
<img src="file://C:\Documents and Settings\screenshots\Image01.png"/>
Then firefox is notified that this is a local filename, and it renders the image correctly in the browser, correctly encoding the string once.
Helpful link: http://support.mozilla.org/en-US/questions/900466

Try using this
file:///c:/Documents%20and%20Settings/screenshots/Image01.png
Whenever you are trying to open a local file in the browser using cmd or any html tag use "file:///" and replace spaces with %20 (url encoding of space)

The following code snippet resolved my issue. Thought this might be useful to others.
var strEnc = this.$.txtSearch.value.replace(/\s/g, "-");
strEnc = strEnc.replace(/-/g, " ");
Rather using default encodeURIComponent my first line of code is converting all spaces into hyphens using regex pattern /\s\g and the following line just does the reverse, i.e. converts all hyphens back to spaces using another regex pattern /-/g. Here /g is actually responsible for finding all matching characters.
When I am sending this value to my Ajax call, it traverses as normal spaces or simply %20 and thus gets rid of double-encoding.

Try this?
encodeURIComponent('space word').replace(/%20/g,'+')

Related

Error when I refresh my index.html page in the browser : Your file was not foundIt may have been moved or deleted. ERR_FILE_NOT_FOUND?

Basically when i copy the full path of the website into the browser it shows me the contents just fine. However when I refresh the browser whilst editing the code to see how it looks I get the following error message and have to copy the full path again to see the results.
Your file was not foundIt may have been moved or deleted. ERR_FILE_NOT_FOUND?
A bit of explaining as to why you are getting %2520 is :
The common space character is encoded as %20. The % character is encoded as %25.
The way you get %2520 is when your url already has a %20 in it, and gets url-encoded again, which transforms the %20 to %2520
C:\Users\moh20\Desktop\Personal Portfolio\index.html <-- There is space between personal and portfolio.
If you provide a local file path only, the browser is expected to encode and protect all characters.
So that space which is treated as %20 is again encoded (only % sign needs encoding here) to %2520.
Solution :
Pass the url along with proper protocol like file://
You can do that in two ways :
1. Right-click on your HTML file and select to open it in a browser to view it.
2. Manually type the protocol along with full file path.(or you can just replace %2520 to %20 in the second url after refreshing).

html URL: '%23' not converted to #

A webpage is opened if the URL contains '#'. But i get 'Page Not Found' error if the url contains '%23' instead of #.
Few months earlier, i was able to access my html page using the following link '%23'.
https://www.something.com/index.html%23MyPage
however, these links are now not working. but works if %23 is changed to #.
https://www.something.com/index.html#MyPage
curious, what could be the reason. Could it be something changed in the webserver? I have such links specified in many places and do not want to change if possible.
Will appreciate your help.
Using %23 instead of # is not possible. The whole purpose of URL encoded strings is that they should not have any function in the URL itself, so that you can pass letters to the URL which normally have functions.
For example ? / #. If these characters aren't encoded, the URL wants to treat them according to their function. So what if you want to use one of these characters without their function? You use encoded characters which will have no functions and are simply treated as strings.

HTML Hrefs in Tomcat

I'm building a HTML string in tomcat and I notice that in my JSON object, my clickable href link is something like:
http://localhost/%22/https://myLinkHere.com/%22
This is a 2 part question. First, should it contain the http://localhost in front? And secondly, why is the %22 there?
Here is what my JSON href looks like in text:
linkDisplayName
This looks right to me, but I can't tell why the last %22 is there.
I think you won't need the localhost as long as you are supplying the relative path
The ascii code for %22 is " which is correctly referenced in your link.
HTML parsers are very lenient, which often leads to confusing behavior. Without the exact JSON it's hard to say for sure but there are a couple of obvious issues. Ultimately the issue is your HTML is malformed and/or mis-escaped.
%22 is " URL-encoded, which means that the quotes you've \-escaped are being included in the URL rather than surrounding them. That likely means that in the JSON they're double-escaped. That might mean it's \\" or something similar; try just a single backslash (\") or no backslash at all (").
Notice that the protocol (https:/) in your URL is also wrong; a URL starts with a protocol (like https) followed by a :, and generally followed by two slashes (//). Your URL follows the protocol with just a single slash, which makes it look like a relative URL rather than an absolute one. Browsers will prefix relative URLs with whatever they infer the current host to be, which in your context appears to be localhost.
The HTML should look like this:
linkDisplayName
So in summary no, the URL should probably not contain http://localhost, and it should not contain those %22s either. They're showing up because your JSON is malformed.

Unwanted characters being added to url in HTML

I'm trying to include a simple hyperlink in a website:
...Engineers (IEEE) projects:
So that it ends up looking like "...Engineers (IEEE) projects:" with "IEEE" being the hyperlink.
When I click on copy link address and paste the address, instead of getting
http://www.ieee.ucla.edu/
I get
http://www.ieee.ucla.edu/%C3%A2%E2%82%AC%C5%BD
and when I click on the link, it takes me to a 404 page.
Check the link. These special character are added automatically by browser (URL Encoding).
Url Encoding
Use this code and it will work::
IEEE
The proper format to add hyperlink to a html is as follow
(texts to be hyperlink)
and for better understanding go through this link http://www.w3schools.com/html/html_links.asp
%C3%A2%E2%82%AC%C5%BD represents „ which is when you get when a unicode „ is being parsed as Windows-1252 data.
Use straight quotes to delimit attribute values in your real code. You are doing this in the code you have included in the question, but that won't have the effect you are seeing. Presumably your codes are being transformed at some point in your real code.
Add appropriate HTTP headers and <meta> data to tell the browser what encoding your file is really using

How can I make the browser read "%0A" as a just string, not encoded character

I'm facing a problem with URI in my web service.
One of my webpage has a link to another page like "http://aaa.com/abc.jsp?columns=abc,%0abcd" using get method.
When the browser(Chrome) opens the page "http://aaa.com/abc.jsp?columns=abc,%0abcd",
it reads "%0a" as LF(The browser thinks "%0a" is encoded) even though "%0abcd" is itself a string.
Is there any solution to solve it?
I think this answers your question: URI encode, Percent-encoding the percent character.
Basically, when you put your string into your URL, just encode the % sign as %25, it should be properly converted.