Solved

json_encode outputting pound sign as \u00a3

Posted on 2014-12-15
9
1,075 Views
Last Modified: 2014-12-16
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?
0
Comment
Question by:SheppardDigital
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
  • +1
9 Comments
 
LVL 43

Expert Comment

by:Chris Stanyon
ID: 40500777
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.
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 40501765
0
 

Author Comment

by:SheppardDigital
ID: 40502088
Thanks.

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?
0
Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 40502182
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"
 "http://www.w3.org/TR/html4/loose.dtd">

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

Open in new window

0
 

Author Comment

by:SheppardDigital
ID: 40502184
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.
0
 
LVL 43

Accepted Solution

by:
Chris Stanyon earned 500 total points
ID: 40502202
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 ) {
   alert(data.yourValue);
});

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.
0
 

Author Comment

by:SheppardDigital
ID: 40502257
Thanks Ray, that explains in perfectly.
0
 
LVL 83

Expert Comment

by:Dave Baldwin
ID: 40502262
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.
0
 
LVL 43

Expert Comment

by:Chris Stanyon
ID: 40502268
I know Ray posts a lot of answers, but I'm not Ray - I'm Chris :)

Thanks for the points...
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

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.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article discusses four methods for overlaying images in a container on a web page
Since pre-biblical times, humans have sought ways to keep secrets, and share the secrets selectively.  This article explores the ways PHP can be used to hide and encrypt information.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question