反序列化阿拉伯语字母呈现???作为输出

时间:2012-12-31 23:49:35

标签: php serialization utf-8 arabic

我有以下代码:

function appear($data)
{
    $output = '';
    $unsee = unserialize ( $data );
    if (is_array ( $nsee ))
    {
        $output .= '<table>' . "";
        foreach ( $nsee as $button )
        {
            $output .= loadbutton ( $button);
        }
        $output .= '
        <tr><td>IP</td>
        <td>' . $_SERVER ['REMOTE_ADDR'] . '</td></tr>' . "";
        $output .= '</table>' . "";
    }
    return $output;
}

function loadbutton($button)
{
    $output = '';
    $output .= '<tr>' . "";
    $output .= '<td>';
    $output .= $button ['values'];
    $output .= '</td><td>';
    $output .= $_POST [strtolower ( $button ['values'])] ;
    $output .= '</td>' . "";
    $output .= '</tr>' . "";
    return $output;
}

当我使用英文序列化数据的出现函数时,它完美地运行并输出正常。

但是当我将它用于阿拉伯语的系列化数据时。一切正常,除了阿拉伯字母显示为“????”而不是真正的阿拉伯字母。

我已经验证了数据库中的数据,一切都是UTF-8,并且所有内容都是有效的数据库,并且明智地保存。但是输出和反序列化是不正确的。

你知道解决这个问题的方法吗? 反序列化是否支持阿拉伯字母?如果没有那么为什么它会正确地保存阿拉伯字母而不是取出它们?

修改

我认为问题在于调用$ button ['values']。

我的$button数组是 array ( 'values' => 'Field Value')

没有解决方案。我知道它应该有用。

SOLUTION:

问题出在我的序列化数据的mysql insert语句中。我插入拉丁语。一个简单的,愚蠢的错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

确保您已在HTML文档中设置:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

或者在输出任何内容之前将它放在PHP代码的顶部,使用HTTP标头进行设置:

header('Content-Type: text/html; charset=utf-8');

浏览器未使用正确的字符集,因此显示?代替这些字符。

也可以使用:

$output .= $_POST[mb_strtolower($button['values'], 'UTF-8')];

由于strtolower()不能正确地小写多字节字符。