2

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');

2
  • can you see if the unicode is correct in the database? i.e. are the question marks there or not? Commented Dec 8, 2008 at 14:16
  • From what I can tell there are no question marks in the database, but perhaps not correct unicode either. Commented Dec 9, 2008 at 12:12

4 Answers 4

3

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.

Sign up to request clarification or add additional context in comments.

2 Comments

Is there a way to convert the data or insert it into the mysql database as unicode?
You can convert latin1 strings (Which is the default for php5), using utf8_encode(). Why is it that you can't use Zend Framework components?
2

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

Comments

1
json_encode( utf8_encode( $Content ) );

This will solve your issue.

Comments

-1

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

1 Comment

json_encode will also handle stuff like escaping quotes for you

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.