4

jQuery.ajax()別のphpファイルからdivにデータを取得するために使用するphpファイルがあります。

jQuery.ajax({
    type: 'POST',
    encoding:"UTF-8",
    dataType:"html", 
    contentType: "text/plain; charset=UTF-8",
    url: '/path/data.php',
    success: function(msg) {
        jQuery('#dataBox').html(msg);
    }
});

私の問題は、データに åäö などの ajax を介して取得している「特別な」文字がある場合、「黒いひし形の疑問符」マークが表示されることです。ブラウザで外部ファイルを開くと、機能します。メインページに特殊文字を配置すると、機能します。

簡略化されたコード:

data.php:

$mysqli = new mysqli("localhost", "username", "pass", "db");
$mysqli->set_charset("utf8");
$mysqli->query("SET GLOBAL time_zone = '+00:00'");
$stmt = $mysqli -> prepare("SELECT GROUP_CONCAT(sometext) AS mytext FROM `mytable`");
$stmt -> execute();
$results = selectResults($stmt);
$stmt -> close();
$mysqli -> close();

selectResults 関数:

function selectResults($stmt)
{
    $parameters = array();
    $results = array();

    $meta = $stmt->result_metadata();

    while ( $field = $meta->fetch_field() ) {   
     $parameters[] = &$row[$field->name]; 
    }

    call_user_func_array(array($stmt, 'bind_result'), $parameters);

    while ( $stmt->fetch() ) {
      $x = array();
      foreach( $row as $key => $val ) {
         $x[$key] = $val;
      }
      $results[] = $x;
    }

    return $results;

}

data.php:

foreach($results as $result){
 $textArray = explode(',', $result['mytext']);
}
foreach($textArray as $text){
echo($text);
}
4

3 に答える 3

3

申し訳ありませんが、Unicode 置換文字 � を取得した場合、入力は UTF-8 で解釈されていますが、入力の生のバイトは UTF-8 と一致しませんでした。つまり、UTF-8 ではありませんでした。

ページに直接アクセスしたときに正しい文字が表示される場合は、実際には他のエンコーディングのデータに UTF-8 解釈を強制する ajax パラメーターである必要があります。ブラウザーのデフォルトは Windows-1252 です。

PHPコードおよび/またはデータの生バイトを投稿してください。

于 2013-01-07T15:37:00.247 に答える
2

data.php ファイルにutf8_encode()あるデータの周りに設定することで修正しました。echo()ブラウザでdata.phpを開くとうまくいったので、これを試すことは考えていませんでした。

編集:

utf8_encode()代わりに selectResults 関数に移動して、データベースから取得したすべての値をエンコードするようにしました。

于 2013-01-07T15:42:06.647 に答える
1

他の人の助けになるかもしれないので、これを答えとして書きます。

この問題を解決するには、出力しているコンテンツがajaxが期待するものと同じであることを確認する必要があります。したがって、utf-8の場合、コンテンツはutf-8であるか、utf-8としてエンコードされている必要があります。

utf8_encode($content);

Esailijaが言うように、データベースからutf-8コンテンツを提供できれば、encode-functionを使用する必要はありません。

于 2013-01-07T15:48:21.527 に答える