php - 反序列化阿拉伯字母渲染 ???作为输出

标签 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;
}

当我对英文序列化数据使用 appear 函数时,它运行良好并且输出正常。

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

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

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

编辑:

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

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

没有想到解决方案。我知道它应该有效。

解决方案:

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

感谢您的帮助。

最佳答案

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

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

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

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

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

也可以使用:

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

作为strtolower()不会正确小写多字节字符。

关于php - 反序列化阿拉伯字母渲染 ???作为输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14106875/

相关文章:

java - 使用 simple-xml 时转换 Point 对象

c# - 为什么 XmlSerializer 要求从 IEnumerable 继承的类型具有 Add(System.Object) 的实现?

c# - 将 Xml 属性添加到字符串属性

javascript - 使用 JavaScript 进行 Python RQ 排队

mysql - mysql 中可能有区分重音和不区分大小写的 utf8 排序规则吗?

php - 设置mysql数据库的问题

php - fetch_assoc 返回缺少的行

regex - 使用sed,正则表达式如何匹配汉字?

php - 如何测试 8 个字段中是否只有 1 个等于 1

php - 如何在 Codeigniter 中仅禁用特定方法的构造函数?