When i send this perfect square character:
25²
And retrieve it in another page using utf8_decode i get (as expected):
25²
Now i want to do the same thing with square roots. When i send this square root:
√225
And retrieve (_$GET) it using utf8_decode as before i get:
?255
Note: i would prefer a method that will solve this when i retrieve the value (like √225) and not a method that will force me to change the initial representation of it.
Edit: I thought i was using mysql but i’m not. sorry for misleading. this is the script i use to retrieve the value:
if (isset($_GET['json'])){
$json = urldecode($_GET['json']);
$roots = json_decode($json, true);
$arrList = utf8_decode(implode(",,,", $roots['nameList']));
print_r($arrList)
}
The
utf8_decodefunction converts a string from UTF-8 to latin1. The square root symbol is not available in latin1, soutf8_decodesubstitutes it with a question mark. This doesn’t happen with ² because it does exist in latin1, in position 0xB2. (You can check which characters are available in the page of latin1 in Wikipedia)A possible solution is removing the call to
utf8_decodeand leave the text as UTF-8, but then you have to make sure the rest of your code can handle UTF-8.