0
와 올바른 문자열 비교

가능한 중복 :
PHP : Array key containing special character not foundPHP : 특수 문자

내가 문자열에 대한 해당 번호를 결정하기 위해 문자열을 비교하고있다. 문자열의 한 세트는 MySQL DB에 저장되고 다른 문자열 세트는 PHP의 배열에 대한 키로 저장됩니다.

다음 문자열을 조회 할 때 배열에서 찾을 수 없습니다. "유치원/보육원/어린이/주부 자녀"

코드에 대한 자세한 내용은 previous question에서 확인할 수 있으며 다음 테스트를 이끌어 냈습니다.

제안 헥스 덤프를 수행 한 후, 나는 MySQL을 DB에서 다음과 같은 결과를

을 가지고 :

PHP에서 문자열에서
43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 e8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72 

:

43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 c3 a8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72 

차이가 있었다 "E8" PHP 대 문자열에서 MySQL DB 대 "C3A8"또는 "è"를 비교합니다.

그럼 하드 코딩 된 PHP 배열 키 문자가 "è"로 유지되도록하려면 어떻게해야합니까?

+0

PHP 파일이 UTF-8로 저장되었지만 데이터베이스가 Latin1/ISO-8859-1을 사용하고 있습니다. – Esailija

+0

왜 같은 질문을 반복 했습니까? 나는 어떤 차이도 보이지 않아, 왜 새로운 질문이 neccessairy로 간주되었는지 모르겠다. – Nanne

+0

지식을 얻은 후에 그것을 이전 질문의 연장으로 본다. – Rynardt

답변

1

PHP와 MySQL 모두에서 동일한 enconding을 사용해야합니다.

당신의 PHP 문자열 인 경우 UTF-8 인코딩, 당신의 테이블 'charsetutf8해야하며 collationutf8_general_ci 또는 utf8_unicode_ci해야합니다. 또한, MySQL에 UTF-8로 쿼리 한 결과를 원한다는 사실을 알려줘야한다. 연결에

  1. 검색어 :SET NAMES utf8을 실행 직후 MySQL로 연결 다음은이를 달성하기 위해 세 가지 방법이 있습니다.
  2. PDO 사용 :$pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 이것은 기본적으로 위와 동일하지만 PDO에 의해 자동 수행됩니다.
  3. 영구 (my.cnf) : 이렇게하면 모든 연결에 대해 UTF-8이 암시 적으로 설정됩니다. 그냥 MySQL의 설정 파일 my.cnfinit-connect='SET NAMES utf8'을 추가하십시오.

개인적으로 제 3의 옵션을 사용하지만 공유 환경에서는 제 2의 옵션을 선택합니다.

+0

참고 사항 : 신이 금지하는 경우 이전 MySQL 확장 프로그램을 사용하고 항상 적절한 API를 사용하십시오. 'mysql_set_charset'. SET NAMES 쿼리를 실행하지 마십시오. – deceze