utf8 conexion charset php mysql utf-8 pdo

php - conexion - Problema de carácter PDO utf-8



set charset utf 8 php pdo (6)

Actualmente estoy trabajando en un proyecto, y en lugar de utilizar consultas regulares de MySQL, pensé que seguiría adelante y aprendería a usar PDO.

Tengo una tabla llamada concursantes, tanto la base de datos, la tabla y todas las columnas están en utf-8. Tengo diez entradas en la tabla de concursantes, y su columna "nombre" contiene caracteres como åäö.

Ahora, cuando obtengo una entrada de la base de datos y var_dump el nombre, obtengo un buen resultado, una cadena con todos los caracteres especiales intactos. Pero lo que tengo que hacer es dividir la cadena por caracteres, para obtenerlos en una matriz que luego mezclaré.

Por ejemplo, tengo esta cadena: Test ÅÄÖ Tåän

Y cuando ejecuto str_split obtengo cada carácter en su propia clave en una matriz. El único problema es que todos los caracteres especiales se muestran así: , lo que significa que la matriz será así:

Array ( [0] => T [1] => e [2] => s [3] => t [4] => [5] => � [6] => � [7] => � [8] => � [9] => � [10] => � [11] => [12] => T [13] => � [14] => � [15] => � [16] => � [17] => n )

Como puede ver, no solo arruina los caracteres, sino que también los duplica en el proceso str_split. He intentado varias formas de dividir la cadena, pero todas tienen el mismo problema. Cuando imprimo la cadena antes de la división, muestra los caracteres especiales muy bien.

Este es mi código dbConn.php:

// Requiere archivo de configuración: require_once (''config.inc.php'');

// Start PDO connection: $dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf-8", $dbUser, $dbPass); $dbHandle -> exec("SET CHARACTER SET utf8"); // Set error reporting: $dbHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

Y este es el código que utilizo para obtener de la base de datos y el bucle:

// Require files: require_once(''dbConn.php''); // Get random artist: $artist = $dbHandle->query("SELECT * FROM ".ARTIST_TABLE." WHERE id = 11 ORDER BY RAND() LIMIT 1"); $artist->setFetchMode(PDO::FETCH_OBJ); $artist = $artist->fetch(); var_dump($artist->name); // Split name: $artistChars = str_split($artist->name);

Me estoy conectando con utf-8, mi archivo php es utf-8 sin BOM y ningún otro personaje especial en esta página comparte este problema. ¿Qué podría estar mal o qué estoy haciendo mal?

Gracias de antemano // Jonathan


PROBLEMAS Y SOLUCIONES UTF-8 por FUNCIONES PHP

1. Cómo guardar los fletadores UTF-8 (cadena matemática, caracteres especiales como 92 ÷ 8 ÷ 2 =?)?

Ans. $ string = utf8_encode (''92 ÷ 8 ÷ 2 =? '');

2. ¿Cómo imprimir UTF-8 Charterers From Database?

Ans. echo utf8_decode ($ string);

Nota: Si no desea hacer esto mediante el uso de codificación / decodificación, puede hacerlo a través de.

1. si estás usando mysqli_query () entonces

$conn = mysqli_connect(''localhost'',''db_username'',''password'',''your_database_name''); mysqli_set_charset($conn,"utf8");

2.Si está usando PDO, entonces

class Database extends PDO{ function __construct() { parent::__construct("mysql:host=localhost;dbname=your_db_name","gurutslz_root","Your_db_password",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ''utf8''")); } } $conn=new Database();


La función str_split divide por byte, no por carácter. Necesitarás mb_split .


Tenga en cuenta que se informa que la declaración utf8 utilizada en su cadena de conexión no funciona. En los comentarios en php.net, frecuentemente veo esta alternativa:

$dbHandle = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ''utf8''"));


este trabajo para mí ... espero que sea útil.

asegúrese de que la base de datos, apache y cada configuración estén en utf8.

OBJETO DOP

$dsn = ''mysql:host='' . Config::read(''db.host'') . '';dbname='' . config::read(''db.basename'') .'';charset=utf8''. '';port='' . Config::read(''db.port'') .'';connect_timeout=15''; $user = Config::read(''db.user''); $password = Config::read(''db.password''); $this->dbh = new PDO($dsn, $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ''utf8''")); $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

funciona si no se usa otra función como str_word_count.

USANDO str_word_count necesitas usar utf8_decode (utf8_encode) ..

function cortar($str) { if (20>$count=str_word_count($str)) { return $str; } else { $array = str_word_count($str,1,''.,-0123456789()+=?¿!"<>*ñÑáéíóúÁÉÍÓÚ@|/%$#¡''); $s=''''; $c=0; foreach ($array as $e) { if (20>$c) { if (19>$c) { $s.=$e.'' ''; } else { $s.=$e; } } $c+=1; } return utf8_decode(utf8_encode($s)); } }

función vuelve cadena con 20 palabras.


str_split no funciona con caracteres de varios bytes, solo devolverá el primer byte, lo que invalidará tus caracteres. podrías usar mb_split .


UTF-8 usando DOP

problemas al escribir caracteres internacionales (incluso chinos y tailandes) en la base de datos

puede haber más formas de hacer que esto funcione. No soy un experto, solo un fanático de la tecnología, interesado en comprender todo esto. En Linux y Windows he configurado algunos CMS (content-managing-systems), usando una muestra del siguiente sitio web:

'' http://www.elated.com/articles/cms-in-an-afternoon-php-mysql ''

La muestra está usando PDO para inserción, actualización y eliminación.

Me tomó algunas horas encontrar una solución. Todo lo que hice, siempre concluí las diferencias entre los datos en mis formularios y en los de phpmyadmin / heidi -views

Seguí las pistas de: '' https://mathiasbynens.be/notes/mysql-utf8mb4 '' pero todavía no había éxito

En mi estructura de CMS hay un archivo ''Config.php'': después de leer esta página web cambié la línea

define( ''DB_DSN'', ''mysql:host=localhost;dbname=mythings);

a

define( ''DB_DSN'', ''mysql:host=localhost;dbname=mythings;charset=utf8'');

Ahora todo funciona bien.