代码之家  ›  专栏  ›  技术社区  ›  Martin

php-pdo-sqlsrv中的特殊字符未正确处理

  •  0
  • Martin  · 技术社区  · 8 年前

    在我的数据库中有一个条目 CARIÑO 当我在数据库中选择它时,我得到 CARIÃO 在浏览器中检查元素时显示。当我再次尝试将其保存到数据库中时,我收到错误消息,说:

    SQLSTATE[HY000]:一般错误:1366不正确的字符串值: '\xC2\x91O' 对于列 我想知道如何以它将显示的方式修复此错误 CARIÃO 并再次另存为 卡里奥 进入数据库。

    在我的数据库连接中,我有:

    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'mysql:charset=utf8mb4'); 
    //Establishes the connection
    $this->_connection = new PDO("sqlsrv:Server=IP;Server=$serverName,1433; Database=".DB_NAME."",DB_USER,DB_PASS,$options);
    

    我在中使用了样本 stackoverflow.com/questions/279170/utf-8-all-the-way-through mysql:charset=utf8mb4

    在我的选择中,我有:

    while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
         // $selected_row['column'] = $column;
         //echo $selected_row['patlast'];//this ouputs CARIÃO
         $rows1[] = array_map('utf8_encode', $selected_row);
         $rows[] =  array_map('utf8_encode', $selected_row);
    }
    

    我从中选择的数据库是ms sql server。

    UPDATE:

    here :

    mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true) === 'UTF-8' ?  $content= $selected_row['patlast'] :  $content= mb_convert_encoding($selected_row['patlast'], 'UTF-8');
    echo "patlast: ".$content; // i get patlast: CARIÑO
    echo "mb_detect_encoding: ". mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true);//i get mb_detect_encoding: UTF-8
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Martin    8 年前

    改变:

    $rows1[] = array_map('utf8_encode', $selected_row);
    $rows[] =  array_map('utf8_encode', $selected_row);
    

    $rows1[] = array_map(null, $selected_row);
    $rows[] =  array_map(null, $selected_row);
    

    现在获取正确的名称 CARIÑO

    推荐文章