Joshxtothe4
Joshxtothe4

Reputation: 4193

json_encode and mysql unicode problem

i have the following javascript code:

http://www.nomorepasting.com/getpaste.php?pasteid=22561

Which works fine(the makewindows function has been changed to show it is a php variable), however the html contains unicode characters, and will only be assigned characters leading up to the first unicode character. If I make a small test file and echo out article_desc directly, all the html is output, although quetsions marks are displayed instead of the correct symbols. However json_encode seems to cut short the html, resulting in errors.

edit: here is a dump straight from the mysql database of the html I am trying to display:

http://www.yousendit.com/download/TTZueEVYQzMrV3hMWEE9PQ

it says utf-8 in the source. the actual page code generated from echoing out article_desc is here:

http://www.nomorepasting.com/getpaste.php?pasteid=22566

it is definitely the same record, so I am unsure why it seems to very different.

edit: this was fixed by calling: mysql_query('SET NAMES utf8');

Upvotes: 2

Views: 6876

Answers (4)

alessa
alessa

Reputation:

json_encode( utf8_encode( $Content ) );

This will solve your issue.

Upvotes: 1

SandRock
SandRock

Reputation: 5563

I had the same issue. I am using Zend_Db/mysqli and my database content is actually UTF8.

I solved the problem by asking my database adapter to use UTF8:

$conf->db->params['charset'] = 'UTF8';

If you use PDO instead of mysqli, you can do it this way:

$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$conf->db->params['driver_options'] = $pdoParams;

If you don't use Zend_Db but use mysqli, you might want to look at http://php.net/manual/en/mysqli.set-charset.php.

Source: http://www.zfsnippets.com/snippets/view/id/13

Upvotes: 2

troelskn
troelskn

Reputation: 117447

json_encode expects strings to be UTF-8 encoded byte streams. You'll have to either use utf-8 encoded strings internally (Which is the only current way to deal with unicode characters in PHP anyway), or use a different library for generating json.

Upvotes: 3

Irmantas
Irmantas

Reputation: 3321

i don't think you need json_encode. json_encode encodes PHP arrays and objects to readable JavaScript format. If you send plain text or html within ajax you don't need json_encode

Upvotes: -1

Related Questions