0
I am performing a query in an Sql Server database, but the special characters are returned as follows:
MAR�O
instead of
MARÇO
I was able to fix using the function utf8_encode(), but I do not want to have to keep treating each result, and performing some research I understood that it is possible to make some configuration in the connection so that the information already come with encoding correct, but I haven’t been able to apply it yet. Follow my connection class for better viewing:
<?php
class pdo_dblib_mssql {
    private $db;
    private $cTransID;
    private $hostname;
    private $port;
    private $dbname;
    private $username;
    private $pwd;
    private $table;
    private $columns;
    private $where = array();
    private $childTrans = array();
    public function __construct($data, $table) {
        $this->hostname = $data['host'];
        $this->port = $data['port'];
        $this->dbname = $data['schema'];
        $this->username = $data['user'];
        $this->pwd = $data['password'];
        $this->table = $table;
        $this->connect();
    }
    public function connect() {
        try {
            $this->db = new PDO("dblib:host=$this->hostname:$this->port;dbname=$this->dbname", "$this->username", "$this->pwd");
        } catch (PDOException $e) {
            $this->logsys .= "\n Failed to get DB handle: " . $e->getMessage();
        }
    }
    public function beginTransaction() {
        $cAlphanum = "AaBbCc0Dd1EeF2fG3gH4hI5iJ6jK7kLlM8mN9nOoPpQqRrSsTtUuVvWwXxYyZz";
        $this->cTransID = "T" . substr(str_shuffle($cAlphanum), 0, 7);
        array_unshift($this->childTrans, $this->cTransID);
        $stmt = $this->db->prepare("BEGIN TRAN [$this->cTransID];");
        return $stmt->execute();
    }
    public function rollBack() {
        while (count($this->childTrans) > 0) {
            $cTmp = array_shift($this->childTrans);
            $stmt = $this->db->prepare("ROLLBACK TRAN [$cTmp];");
            $stmt->execute();
        }
        return $stmt;
    }
    public function commit() {
        while (count($this->childTrans) > 0) {
            $cTmp = array_shift($this->childTrans);
            $stmt = $this->db->prepare("COMMIT TRAN [$cTmp];");
            $stmt->execute();
        }
        return $stmt;
    }
    public function close() {
        $this->db = null;
    }
    public function select($columns){
        $this->columns = $columns;
        return $this;
    }
    public function where($column, $value, $op = "=") {
        $this->where[] = "$column $op '$value'";
        return $this;
    }
    public function get(){
        $sql = "SELECT " . implode(", ", $this->columns) . " FROM $this->table WHERE " . implode(" AND ", $this->where);
        $stmt = $this->db->prepare($sql);
        $stmt->execute();
        $ret = $stmt->fetchAll();
        var_dump($ret);die;
    }
}
Note: This database is third party, which provides me with a view for consultation, so larger seat-side settings are not possible.
The collation of view is Latin1_General_CI_AS
It is possible to automatically treat these characters in some way by performing some configuration on the connection or before performing the query?
related: http://answall.com/questions/115042/pdo-dblib-e-codificacao-utf-8
– novic