$r->user and UTF8 flag

Michael Schout <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
Hi.

I've noticed that when setting $r->user($value) if $value is a string
with the UTF8 flag on, calling $r->user returns the string without the
UTF8 flag on again.

In other words, this code:

use Devel::Peek;
$r->user($user);
warn Dump($user);
warn Dump($r->user);

If I pass $user = "úser"

the Dump of $user outputs

SV = PV(0x7f8a48d850b0) at 0x7f8a4afc1438
  REFCNT = 1
  FLAGS = (PADMY,POK,pPOK,UTF8)
  PV = 0x7f8a4bbf09d0 "\303\272ser"\0 [UTF8 "\x{fa}ser"]
  CUR = 5
  LEN = 16

Notice that the UTF8 flag is on.

But the dump of $r->user is:

SV = PV(0x7f8a42ba67c0) at 0x7f8a4afc17b0
  REFCNT = 1
  FLAGS = (PADTMP,POK,pPOK)
  PV = 0x7f8a4bbfbb60 "\303\272ser"\0
  CUR = 5
  LEN = 16

Notice that the UTF8 flag is off on the value returned by r->user.

I'm guessing this is normal behavior due to the fact that $r->user calls
the Apache C API directly?

I'm wondering how others have dealt with situations like this. Is there
any way to get a scalar out of $r->user with the UTF8 flag turned on iff
it was set with a value that had the UTF8 flag turned on?  I know the
following works:

$user = Encode::decode('UTF-8', $r->user)

But I really would have expected $r->user to return a value with the
UTF8 flag already on since the value that I used to set it did in fact
have the flag turned on.

FWIW, this is mod_perl 2.0.8, Apache 2.2.29

Regards,
Michael Schout
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.