?
Solved

json_encode outputting pound sign as \u00a3

Posted on 2014-12-15
9
Medium Priority
?
1,180 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 111

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
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 84

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 2000 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 84

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

Want to be a Web Developer? Get Certified Today!

Enroll in the Certified Web Development Professional course package to learn HTML, Javascript, and PHP. Build a solid foundation to work toward your dream job!

Question has a verified solution.

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

Developers of all skill levels should learn to use current best practices when developing websites. However many developers, new and old, fall into the trap of using deprecated features because this is what so many tutorials and books tell them to u…
Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
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…
Suggested Courses

752 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