Xee*_*ees 4 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;
}
Run Code Online (Sandbox Code Playgroud)
当我使用英文序列化数据的出现函数时,它完美地工作并输出正常.
但是,当我将它用于阿拉伯语的系列化数据时.一切正常,除了阿拉伯字母显示为"????" 而不是真正的阿拉伯字母.
我已经验证了数据库中的数据,一切都是UTF-8,并且所有内容都是有效的数据库,并且明智地保存了系列文件.但输出和反序列化是不正确的.
你知道解决这个问题的方法吗?反序列化是否支持阿拉伯字母?如果没有那么为什么它会正确地保存阿拉伯字母而不是取出它们?
编辑:
我相信的问题在于调用$ button ['values'].
我的$button阵列是
array ( 'values' => 'Field Value')
想到没有解决方案.我知道它应该工作.
解:
问题出在我的序列化数据的mysql插入语句中.我插入拉丁语.一个简单的,愚蠢的错误.
谢谢您的帮助.
确保您已在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')];
Run Code Online (Sandbox Code Playgroud)
因为strtolower()不会正确地小写多字节字符.