编码问题数据表
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 "€" .$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->exec),但是当我添加它时,我的角色是
与我的输入有很大不同。:
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
最后两行,差不多好了,只是少了 € 和 ‘,’ 字符。
我正在使用数据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 "€" .$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->exec),但是当我添加它时,我的角色是 与我的输入有很大不同。:
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
最后两行,差不多好了,只是少了 € 和 ‘,’ 字符。