编码问题数据表

Encoding problems Datatables

我正在使用数据tables 在我的网站上显示我的记录,但是当我在我的输入字段中输入这些字符时:( € OR ' OR ' ) 我的数据table 没有显示这些字符。显示所有其他特殊字符。

网站的其余部分显示所有字符,包括:( € OR ‘ OR ’)?

static function data_output ( $columns, $data )
{
    $out = array();
    for ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {
        $row = array();

        for ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {

            $column = $columns[$j];

            // Is there a formatter?
            if ( isset( $column['formatter'] ) ) {
                $row[ $column['dt'] ] = $column['formatter']( $data[$i][ $column['db'] ], $data[$i] );
            }
            else {
                $row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];
            }
        }

        $row = self::encodeutf8($row);

        $out[] = $row;
    }
    return $out;
}

private static function encodeutf8($d) {
    if (is_array($d)) {
        foreach ($d as $k => $v) {
            $d[$k] = self::encodeutf8($v);
        }
    } else if (is_string ($d)) {
        return utf8_encode($d);
    }
    return $d;
}

函数是我自己加的:encodeutf8。我这样做是因为在此之前,我的 table 每次添加一个包含特殊字符的项目时都会崩溃。

我的专栏如下所示:

$columns = [
        ['db' => 'foto1', 'dt' => 0, 'formatter' => function($d, $row) {
            if($d == "") {
                return "";
            }
            return "<img class='thumb' src='/" . $d . "'/>";
        }],
        ['db' => 'p_categorie', 'dt' => 1],
        ['db' => 'p_genre', 'dt' => 2],
        ['db' => 'p_aantal', 'dt' => 3],
        ['db' => 'p_prijs', 'dt' => 4, 'formatter' => function($d, $row){
            if($d == '0.00'){
                return "N.o.t.k";
            }
            else{
                return "&euro;" .$d.",-";
            }
        }],
        ['db' => 'w_naam', 'dt' => 5],
        ['db' => 'p_artiest', 'dt' => 6, 'formatter' => function($d, $row){
            if($d != ''){
                return $d;
            }
            else{
                return "N.V.T.";
            }
        }],
        ['db' => 'p_medium', 'dt' => 7],
        ['db' => 'p_titel', 'dt' => 8],
        ['db' => 'p_conditie', 'dt' => 9],
        ['db' => 'p_bijzonderheid', 'dt' => 10],
        ['db' => 'p_datum', 'dt' => 11, 'formatter' => function($d, $row) {
            return "<a style='text-decoration:none; color:black;' title='".$d."'>".date('d-M-Y', strtotime($d))."</a>";
        }],
        ['db' => 'p_id', 'dt' => 12, 'formatter' => function($d, $row) {
            return "<a data-id='" . $d . "' href='/productdetail?p_id=" . $d . "'>Bekijk</a>";
        }],
    ];

我期待任何回复!

我猜你是在使用你自己的数据库连接来改变 ssp.class.php。你的问题是你没有为你的连接定义一个正确的字符集——它应该被设置为 utf8

我不知道您使用的底层连接是什么,但是您必须在建立连接后立即设置字符集。

  • mysql
    mysql_set_charset('utf8');  
  • mysql我
    mysqli_set_charset('utf8');  
    $mysqli->set_charset('utf8');   
  • PDO
    $dbh = new PDO($name, $username, $password);
    $dbh->exec("set names utf8");

感谢您回复我的 post,

我确实在使用标准 SSP 文件,我的连接如下所示:

static function sql_connect ( $sql_details )
{
    try {
        $db = @new PDO(
            "mysql:host={$sql_details['host']};dbname={$sql_details['db']}",
            $sql_details['user'],
            $sql_details['pass'],
            array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )
        );
        //$db->exec("set names utf8");
    }
    catch (PDOException $e) {
        self::fatal(
            "An error occurred while connecting to the database. ".
            "The error reported by the server was: ".$e->getMessage()
        );
    }

    return $db;
}**strong text**

我尝试添加 ($db->e​​xec),但是当我添加它时,我的角色是 与我的输入有很大不同。:

muziek  Drumandbass 2   €10.00,-    "hoi " hallo    ¿ç´¶¬»«ÃÂ¥  lp  äåé®þüúíóöáÃðøæ©ñµ    Goede staat     22-Oct-2015 Bekijk
muziek  Classicrock 1   €10.00,-    %@%@":blabla    ´æ©ñµç¿  cd  ¡²³¤â¬Â¼Â½Â¾ââÂ¥Ãäåé®þüúíóö«»áÃðø¶´ Goede staat     21-Oct-2015 Bekijk

而不是:

 muziek Drumandbass 2   €10.00,-    "hoi " hallo    ¿ç´¶¬»«×¥   lp  äåé®þüúíóöáßðøæ©ñµ  Goede staat     22-Oct-2015 Bekijk
 muziek Classicrock 1   €10.00,-    %@%@":blabla    ´æ©ñµç¿ cd  ¡²³¤¼½¾¥×äåé®þüúíóö«»áßðø¶´  Goede staat     21-Oct-2015 Bekijk

最后两行,差不多好了,只是少了 € 和 ‘,’ 字符。