【问题标题】:Encoding problems Datatables编码问题数据表
【发布时间】:2015-10-22 09:52:12
【问题描述】:

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

网站的其余部分显示所有字符,包括:( € 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。我这样做是因为在那之前,每次我添加一个带有特殊字符的项目时,我的表都会崩溃。

我的专栏是这样的:

$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>";
        }],
    ];

我期待任何回复!

【问题讨论】:

    标签: encoding datatables special-characters utf8-decode


    【解决方案1】:

    我猜你正在使用你自己的数据库连接使用ssp.class.php 的转移。您的问题是您没有为您的连接定义正确的字符集 - 它应该设置为utf8

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

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

    【讨论】:

    • 这在我删除了我自己的编码函数后成功了!非常感谢!
    【解决方案2】:

    感谢您回复我的帖子,

    我确实在使用标准 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
    

    最后两行几乎没有问题,只是缺少€和','字符。

    【讨论】:

      猜你喜欢
      • 2019-05-30
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 2017-04-06
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      相关资源
      最近更新 更多