J'utilise PDO pour me connecter à une base de données MySQL. Dans ma chaîne de connexion, j'ai déjà ajouté charset=utf8mb4
et toutes mes bases de données et tables sont utf8mb4_unicode_ci
, mais je suis confronté à un problème.Problèmes de codage des caractères de recherche PHP MySQL
Pour rechercher des entrées en fonction de leur titre sur content
tableau que je utilise le code ci-dessous:
SELECT * FROM content WHERE title LIKE '%سيگنالها%'
le mot-clé est un mot persan. Maintenant, le code ci-dessus renvoie 1 résultat qui est correct et comme prévu.
Mais Si je fais une forme dans mon application PHP et entrez le mot SAME soit en utilisant un macOS/PC Windows ou en utilisant un téléphone Android que je reçois 0.
J'ai suivi cette question vers le bas et il semble que même si les mots saisis par l'utilisateur sont exactement les mêmes que celui déjà dans la base de données, ils sont en fait pas même.
Selon cette online tool, le code de caractère décimal
pour سيگنالها
il est: 1587, 1 0, 1711, 1606, 1575, 1604, 1607, 1575
Alors que
pour سیگنالها
il est: 1587, 1 0, 1711, 1606, 1575, 1604, 1607, 1575
Avez-vous e place La différence? C'est en gras. En fait, si vous copiez les deux valeurs et les passez en here, vous verrez la différence par vous-même. Que puis-je faire pour résoudre ce problème ennuyant?
J'utilise PHP 7 et MariaDB 10.1.
ce qui est le jeu de caractères de la page? il doit être utf-8 et aussi, vous devez exécuter 'SET NAMES utf8' après la connexion mysql. veuillez poster un code d'échantillon. – Akam
@Akam C'est «utf-8» aussi ce qui précède peut être testé dans phpmyadmin. Mêmes résultats – VSG24
Ok, c'est une question de clavier, j'utilise aussi Unikurd (kurdish sorani) les mêmes lettres que le persan et l'arabe, parfois, un utilisateur utilisant un clavier qui a différentes entités Unicode que celui enregistré dans la base de données, mais nous avons résolu ce problème en remplaçant les lettres par des communes. – Akam