4

私は次のコードを持っています:

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であり、すべてが有効なデータベースであり、シリアル化された保存が有効です。しかし、出力と非シリアル化は正しくありません。

これを修正する方法を知っていますか?アンシリアライゼーションはアラビア文字をサポートしていますか? そうでない場合、アラビア文字を正しく保存するのに取得しないのはなぜですか?

編集:

私が信じている問題は、$button ['values'] の呼び出しにあります。

私の$button配列は array ( 'values' => 'Field Value')

解決策が思い浮かびません。私はそれがうまくいくはずだと知っています。

解決:

問題は、シリアル化されたデータの mysql 挿入ステートメントにありました。私はラテン語で挿入していました。単純でばかげた間違い。

ご協力ありがとうございました。

4

1 に答える 1

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')];

Asstrtolower()は、マルチバイト文字を適切に小文字に変換しません。

于 2012-12-31T23:54:51.290 に答える