Yesterday, I spent longer than I care to admit debugging an update to an old PHP script. It fetched a string from a MySQL database and (here’s the new part) passed the string to json_encode(). That call failed when the data included the multibyte characters ¼ or ½ or ¾. All of my attempts to remove the multibyte characters from the strings (replacing them with “1/4″ or “1/2″ or “3/4″) failed.
The problem turned out to be PHP 5.3.10′s default for the character set of the MySQL connection and the fix was easy. Explicitly set the character set to UTF-8:
$this->dblink = mysql_connect($this->host, $this->username, $this->password);
Once that was set, json_encode() properly recognized the string as UTF-8 and it ran without error.
This problem will not occur with newer versions of PHP. They have the default character set as UTF-8.