json_encode outputting pound sign as \u00a3

I'm performing a query on a database and encoding the results to json via json_encode.

The issue is that a pound sign £ is being outputted to the browser as '\u00a3'

Here's how I'm sending the json to the browser.

header('Content-Type: application/json; charset=utf-8;');
echo json_encode($this->response);

Open in new window

Can someone tell me what's going wrong?
Who is Participating?
Chris StanyonConnect With a Mentor Commented:
If you just call your script in a browser it will show the UTF codes - it's not until you call it in Javascript that you'll see the £ sign. It sounds to me like it's working exactly as it should.

Try calling your JSON page using javascript and alerting the result - you'll see it's fine. Create an HTML page that includes jQuery and use something like the following:

$.getJSON( "yourScript.php", function( data ) {

Open in new window

Substitue yourScript.php with the name of your php file and yourValue with whatever you've called the array key in your php file.
Chris StanyonCommented:
Nothing's wrong - you've set your encoding to UTF-8 which encodes the pound sign as u00a3 - it's working exactly as it should. If the page you're calling it from is also set to UTF8 then when you echo out the JSON result, you'll see the proper £ sign.
Ray PaseurCommented:
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

SheppardDigitalAuthor Commented:

What I don't understand is why the pound sign isn't rendering in the browser when I'm passing over a head to the browser to tell it the document is UTF-8?
Dave BaldwinFixer of ProblemsCommented:
Simple test page works in Firefox 34, Chrome, IE8, and Safari 5.  Note the UTF-8 declaration in the page.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JS Unicode Test</title>
<h1>JS Unicode Test</h1>
<script type="text/javascript">
document.write("This is \u00a3 .");
// -->

Open in new window

SheppardDigitalAuthor Commented:
Hi Dave,

I'm outputting just json to the browser, so that it can be used by other applications so we can't wrap it in HTML tags.

This isn't really an issue now, as the mobile app developer who is working with the API confirms that iOS handles the UTF-8 fine.

Why it doesn't render properly in my browser I don't know.
SheppardDigitalAuthor Commented:
Thanks Ray, that explains in perfectly.
Dave BaldwinFixer of ProblemsCommented:
I'm outputting just json to the browser
There's your problem then.  JSON is not valid HTML and if there is nothing on the page to support it like on my demo, it will be rendered in plain text with no recognition of UTF-8.

While I have pages that do send non-HTML data, they are not being sent to browsers but to other pages on servers that know what to do with them.
Chris StanyonCommented:
I know Ray posts a lot of answers, but I'm not Ray - I'm Chris :)

Thanks for the points...
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.