Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Returning special characters in CGI

by Anonymous Monk
on Sep 08, 2013 at 08:55 UTC ( #1052886=perlquestion: print w/replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to return a couple of special characters (GBP symbol, , and infinity symbol, ∞) from a CGI::Application. I've set the headers to be UTF-8 encoding. Unfortunately, however, the characters I intend don't seem to be returned by the web server and instead there are some substitutions that make me think the encoding is off. I'm not sure how to go about troubleshooting this. Ideas?

Replies are listed 'Best First'.
Re: Returning special characters in CGI
by moritz (Cardinal) on Sep 08, 2013 at 09:02 UTC
    I'm not sure how to go about troubleshooting this. Ideas?

    First you should have a firm understanding of how UTF-8 and character encodings work in Perl. Character Encodings in Perl might help you.

    Then you should debug it the same way you debug any other problem where data doesn't come out the way you think it should: You trace the data's path through your program, and figure out where it starts to be wrong, and then fix the place where it starts to go wrong.

Re: Returning special characters in CGI::Application (bytes
by Anonymous Monk on Sep 08, 2013 at 10:07 UTC

    . I'm not sure how to go about troubleshooting this. Ideas?

    :)Basic debugging checklist , brian's Guide to Solving Any Perl Problem, CGI Help Guide , Troubleshooting Perl CGI scripts, How do I post a question effectively? (post code), perlunitut: Unicode in Perl#I/O flow (the actual 5 minute tutorial)

    package Froup;# use parent qw/ CGI::Application /; use CGI::Application::Plugin::AutoRunmode; use utf8; use Encode; my $pound = "\N{U+00A3}\xA3"; my $infinity = "\N{U+221E}"; sub my_run_mode : StartRunmode { my( $self ) = @_; $self->header_add( -charset=>'UTF-8' ); Encode::encode('UTF-8',qq{<!DOCTYPE html><html><head> <title> Pound </title> <meta charset="utf-8" /></meta></head> <body> Pound <a href="?;rm=another_run_mode">$pound</a> </body> </html>}); } sub another_run_mode : Runmode { my( $self ) = @_; $self->header_add( -charset=>'UTF-8' ); Encode::encode('UTF-8', qq{<!DOCTYPE html><html><head> <title> Infinity </title><meta charset="utf-8" /></meta></head> <body> Infinity <a href="?;rm=my_run_mode">$infinity</a> </body> </html>}); } 1; #~ plackup -l localhost:80 -e require(Froup) #~ perl #~ perl rm=my_run_mode #~ perl rm=another_run_mode
Re: Returning special characters in CGI
by fullermd (Priest) on Sep 08, 2013 at 23:47 UTC

    One thing to be careful about with CGI stuff is to make sure you look exactly at what you get. Like, with telnet, or wget/curl/fetch/etc. Once a web browser touches it, who knows what happens; View Source things often have already done some transformation, so don't show you the raw bytes the server handed back. Which may or may not be the raw bytes your app handed it; there are lots of layers in web stuff, and you gotta track down where things are failing to do what you expect.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1052886]
Approved by moritz
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (4)
As of 2018-06-24 07:17 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.