Re: [PHP] mb_convert_encoding converting to ASCII instead of UTF-8
[email protected] (Robert William Vesterman)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
OK, now the problem seems to be not that mb_convert_encoding is encoding
incorrectly, it's that mb_detect_encoding is detecting incorrectly.
It's claiming that the raw string as received from the browser is UTF-8,
where in reality it seems to be ISO-8859-1. Sample code:
<html><head><title>Minnie</title></head><body><p>
<?php
function output ( $label, $x ) {
echo $label . ': ' . $x . ' ... ' . mb_detect_encoding ( $x ) .
'<br/>';
}
$x = $_REQUEST['Minnie'];
output ( "Raw", $x );
output ( "Convert from detected",
mb_convert_encoding ( $x, "UTF-8", mb_detect_encoding ( $x ) ) );
output ( "Convert from ISO",
mb_convert_encoding ( $x, "UTF-8", "ISO-8859-1" ) );
?>
</p></body></html>
Output for "Minnie=Mi%F1oso":
Raw: Mi?oso ... UTF-8
Convert from detected: Mioso ... ASCII
Convert from ISO: Miñoso ... UTF-8
Robert William Vesterman wrote:
> A little additional info: The "ASCII to ASCII" case for "Minnie=Mouse"
> is merely because the UTF-8 encoding for "Mouse" is the same as the
> ASCII encoding for "Mouse", and mb_detect_encoding is matching on
> ASCII before UTF-8. So that's not an issue.
>
> But, the "UTF-8 to ASCII" case for "Minnie=Miñoso" is still
> (seemingly) screwy.
>
> Robert William Vesterman wrote:
>> I've run into a problem where mb_convert_encoding seems to be
>> converting to ASCII, even though I'm telling it to convert to UTF-8.
>> This is with PHP version 4.3.11.
>>
>> I had been asking it to convert from "auto" to UTF-8, so at first I
>> thought maybe "auto" was not the right choice. So I called
>> "mb_detect_encoding" to see the format of what I was trying to
>> convert; it said it was already UTF-8 (before I did the conversion).
>> So then I thought maybe I got the "from" and "to" parameters
>> backwards (although I was confident I was following the
>> documentation), so I changed mb_convert_encoding to use "UTF-8" as
>> /both/ the from and to.
>>
>> It still converts to ASCII.
>>
>> I understand that, given that it's already UTF-8, I don't need to
>> convert it to UTF-8. But other things that I receive might /not/ be
>> UTF-8, so I am still concerned with this.
>>
>> Sample code:
>>
>> <html><head><title>Minnie</title></head><body><p>
>> <?php
>> $x = $_REQUEST['Minnie'];
>> echo $x . ' ... ' . mb_detect_encoding ( $x ) . '<br/>';
>> $x = mb_convert_encoding ( $x, "UTF-8", "UTF-8" );
>> echo $x . ' ... ' . mb_detect_encoding ( $x ) . '<br/>';
>> ?>
>> </p></body></html>
>>
>> Output, when called with URL parameter "Minnie=Miñoso":
>>
>> Miñoso ... UTF-8
>> Mioso ... ASCII
>>
>> Then I changed the "from" so that I could try converting from
>> something other than UTF-8:
>>
>> $x = mb_convert_encoding ( $x, "UTF-8", mb_detect_encoding ( $x ) );
>>
>> And now, output when called with "Minnie=Mouse":
>>
>> Mouse ... ASCII
>> Mouse ... ASCII
>>
>> Does anyone have any idea what's going on here? Am I doing something
>> wrong?
>>
>> Thanks in advance for any help.
>>
>>
>
>