So, I’ve run into a problem with PHP’s rawurlencode function. All text fields in our web app are of course converted before being processed by the web-server, and we’ve used rawurlencode for this. This works fine with almost every character I’ve found, expect for the “£” sign. Now, there is no reason for our users to ever enter a pound sign, but they might, so I want to take care of this.
The problem is that rawurlencode doesn’t encode a pound sign entered on the webpage as %A3, but instead as %C2%A3. Even worse, if the user failed to enter another bit of critical information (which causes the webpage to refresh – the checks are done on the backend side – and try and refill the form boxes with the information the user had used), then when the %C2 is run through rawurldecode/encode, it becomes Ã? – aka, %C3?. And of course the “£” is also turned into another £!
So, what is causing this? I assume it’s a character encoding issue, but I’m not that knowledgable about these things. I heard somewhere that I can encode £s as £ manually, but why should I need to do that when the database can handle “£”s, and there is a percentage-encoding for a pound sign? Is this a bug in rawurlencode, or a bug caused by differing character sets?
Thanks for any help.
The standard requires forms to be submitted in the character encoding you specify in
<form accept-charset="...">or UTF-8 if it’s not specified or the text the user has entered cannot be represented in the charset you specify.Clearly, you’re receiving the pound sign encoded in UTF-8. If you want to convert it to ISO-8859-15, write: