数据表显示查询中的行,在 áéíóúÑ 中带有 �

Posted

技术标签:

【中文标题】数据表显示查询中的行,在 áéíóúÑ 中带有 �【英文标题】:datatables showing row from query with � in áéíóúÑ 【发布时间】:2018-12-05 19:32:45 【问题描述】:

我已经准备好使用 DataTables 与 JQueryhtml 制作一个漂亮的表格。

但是当查询我的db 时,它会在这种字符情况下(几乎)向我显示这样的值。

(Spanish letters) áéíóúÑ 

任何建议。

使用的添加数据表代码:

var table = $('#example').DataTable(
  // Localization
  language : 
    emptyTable     : 'Nada para mostrar.',
    zeroRecords    : 'Nada coincide.',
    thousands      : '.',
    processing     : 'Cargando informacion...',
    loadingRecords : 'Cargando Informacion...',
    info           : ' _PAGE_ / _PAGES_',
    infoEmpty      : ' 0 / 0',
    infoFiltered   : '( _MAX_ )',
    infoPostFix    : '',
    lengthMenu     : 'Mostrando _MENU_',
    search         : 'Filtrar:',
    paginate       : 
      first    : 'Primero',
      last     : 'Ultimo',
      next     : 'Siguiente',
      previous : 'Previo'
    
  
);jquery

【问题讨论】:

服务器端的字符编码(SO 搜索或 Google 的关键字)——有数据库字符集和 HTML 字符集.... UTF-8 适用于生成的页面...和作为数据库的“后端”latin1_swedish_ciutf8_general_ci 工作正常。 嗨,Louis 感谢您的快速回复。这仅发生在 Datatables 在 javascript 端处理的查询上。我在没有 dataTables 的情况下进行测试,字符显示正常 好的...所以您可以echo 使用正确字符的数据吗? (比如<div> database 已经有utf8_spanish_ci 排序规则 好的...所以它 不是 DataTables 插件也不是 jQuery。 -- 这是一个调试步骤。 ;) 我为您找到了exhaustive page 以了解更多信息。 【参考方案1】:

这个问题的解决方案在 PDO 调用上根除。

我错误地使用了两个不同的调用,其中一个没有像这样在调用上使用 utf8 正确配置

try
    $pdo = new PDO("mysql:host=".DBHost.";dbname=".DBName."", DBUser, DBPassword);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

     catch(PDOException $e)

      die("ERROR: Could not connect. " . $e->getMessage());

   

最后,当添加正确的 utf-8 配置时,所有字符都显示良好。

 try
    $pdo = new PDO('mysql:dbname=' . $this->DBName . ';host=' . $this->Host . ';port=' . $this->DBPort . ';charset=utf8', 
            $this->DBUser, 
            $this->DBPassword,
            array(
                //For php 5.3.6 or lower
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
                PDO::ATTR_EMULATE_PREPARES => false,
                //
                //PDO::ATTR_PERSISTENT => true,

                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
            )
        );

     catch(PDOException $e)

      die("ERROR: Could not connect. " . $e->getMessage());

   

最后的代码解决了这个问题。 谢谢!

【讨论】:

以上是关于数据表显示查询中的行,在 áéíóúÑ 中带有 �的主要内容,如果未能解决你的问题,请参考以下文章

如何完全替换 PHP 中的所有特殊字符而不在结果中留下任何 HTML 实体

西班牙语(ó、í 等)的 JQuery 标点符号在 IE8 中不起作用

PHP strtr 根本不起作用

将 .csv 导入 R 时出现 UTF-8 编码错误?

如何解释 Python 中正则表达式的重音字符?

如何解决“非法混合排序规则”SQLException?