2017-09-06 3 views
1

저는 PDO를 사용하여 MySQL 데이터베이스에 연결하고 있습니다. 내 연결 문자열에 이미 charset=utf8mb4을 추가했으며 모든 데이터베이스와 테이블은 utf8mb4_unicode_ci이지만 문제가 있습니다. 위해PHP MySQL 검색 문자 코딩 문제

나는 아래의 코드를 사용하고 content 테이블에 자신의 제목을 기준으로 항목을 검색하기 :

SELECT * FROM content WHERE title LIKE '%سيگنالها%'

키워드가 페르시아 단어입니다. 위의 코드는 정확하고 예상대로 1 개의 결과를 반환합니다.

그러나 내 PHP 응용 프로그램에서 양식을하고 중 맥 OS/윈도우 PC를 사용하거나 내가 0 결과를 얻을 안드로이드 폰을 사용하여 SAME 단어를 입력합니다.

나는이 문제를 추적했으며 사용자가 입력 한 단어가 데이터베이스에있는 단어와 완전히 똑같아 보이더라도 실제로는 이 아니며과 동일하다고 생각합니다. 이 online tool 따르면

, 그것의 سيگنالها 십진수 문자 코드

: 1587 1 61 0, 1,711, 1,606, 1,575, 1,604, 1,607, 1,575

위한 반면 سیگنالها 해당 사항 : 1587, 1 0, 1711, 1606, 1575, 1604, 1607, 1575

차이가 있습니까? 대담한 모양입니다. 실제로 두 값을 모두 복사 한 후 here에 지나면 차이점을 직접 확인할 수 있습니다.

이 성가신 문제를 해결하려면 어떻게해야합니까? 저는 PHP 7과 MariaDB 10.1을 사용하고 있습니다.

+0

페이지 캐릭터 셋은 무엇인가 :

는 이러한 논의를 참조하십시오? 그것은 utf-8이어야하며 또한 mysql 연결 후에'SET NAMES utf8'을 실행해야합니다. 샘플 코드를 게시하십시오. – Akam

+0

@Akam'utf-8' 또한 phpmyadmin에서 위 테스트가 가능합니다. 같은 결과. – VSG24

+0

그렇다면이 문제는 키보드 문제이며, 페르시아어 및 아랍어와 같은 유니크 (유니버설)를 사용하고 있습니다. 때로는 데이터베이스에 저장된 유니 코드 엔티티와 다른 유니 코드 엔티티가있는 키보드를 사용하는 사용자도 있지만이 문제를 해결했습니다. 문자를 공통 문자로 바꿈으로써 – Akam

답변

1

함께 끈으로 묶어서 동일하게 보일지라도 같은 의미 일 수 있습니다.

첫 번째 문자열 (1610)은 ARABIC LETTER FARSI YEH [1]이고 다른 하나 (1740)는 ARABIC LETTER YEH [2]입니다.

[1] https://en.wiktionary.org/wiki/%DB%8C [2] https://en.wiktionary.org/wiki/%D9%8A

는 또한 PHP 대한 간단한 형태를 만들고 $ _POST 통해 전송 된 값이 유지되고 있는지를 테스트 두 문자열 . 결과 : 값이 변환되지 않습니다.

그래서 아마도 아랍어 키보드를 사용하여 페르시아어 텍스트를 생성하고 있습니다. 권장 솔루션은 일종의 입력 정규화입니다.

1) https://groups.google.com/forum/embed/?place=forum/persian-computing#!topic/persian-computing/xS-G0qIGS8A

2) https://github.com/Samsung/KnowledgeSharingPlatform/blob/master/sameas/lib/lucene-analyzers-common-5.0.0/org/apache/lucene/analysis/fa/PersianNormalizer.java

3) can't search in farsi text with arabic keyboard on iphone