복붙노트

[MONGODB] MongoDB를 PHP의 UTF-8 문제

MONGODB

MongoDB를 PHP의 UTF-8 문제

나는 다음과 같은 문서를 삽입해야한다고 가정합니다 :

{
    title: 'Péter'
}

(참고는 IS)

그것은 ... 나에게 나는 다음과 같은 PHP 코드를 사용하여 오류를 제공합니다 :

$db->collection->insert(array("title" => "Péter"));

...이 UTF-8 할 필요가 있기 때문이다.

그래서 나는이 코드 줄을 사용합니다 :

$db->collection->insert(array("title" => utf8_encode("Péter")));

나는이 문서를 요청할 때 지금, 나는 아직도 그것을 해독해야 ... :

$document = $db->collection->findOne(array("_id" => new MongoId("__someID__")));
$title = utf8_decode($document['title']);

이 프로세스를 자동화 할 수있는 방법이 있습니까? 나는 문자 인코딩하여 MongoDB의 (나는 (라틴) CP1252 서유럽을 사용하고 MySQL의 데이터베이스를 마이그레이션하는거야을 변경할 수 있습니까?

나는 이미의 Content-Type 헤더를 변경 고려, 문제는 모든 정적 문자열 (하드 코딩)는 UTF8 아니라는 것이다 ...

사전에 감사합니다! 팀

해결법

  1. ==============================

    1.JSON과 BSON 할 수있는 유일한 인 코드 / 디코드 유효한 UTF-8 문자열, 데이터 (포함 입력) UTF-8이 같은, 어떤 JSON 따라 시스템에 전달하기 전에 변환 할 필요가없는 경우 :

    JSON과 BSON 할 수있는 유일한 인 코드 / 디코드 유효한 UTF-8 문자열, 데이터 (포함 입력) UTF-8이 같은, 어떤 JSON 따라 시스템에 전달하기 전에 변환 할 필요가없는 경우 :

    $string = iconv('UTF-8', 'UTF-8//IGNORE', $string); // or
    $string = iconv('UTF-8', 'UTF-8//TRANSLIT', $string); // or even
    $string = iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string); // not sure how this behaves
    

    개인적으로 난의 iconv () 매뉴얼 페이지를 참조하십시오 첫 번째 옵션을 선호합니다. 다른 대안은 다음과 같습니다 :

    당신은 항상 당신이 MySQL의에서 MongoDB를 마이그레이션하고 있음을 언급 한 이후 확인하여 문자열이 CSV로 현재 데이터베이스를 수출하고 와서 가져 오기 스크립트를 사용하여 시도해야하지만, UTF-8 인코딩, 심지어는 사용자가 제출 한 것들해야 몽고와? 그들은이 처리해야 ...

    편집 : 나는 'BSON는 UTF-8 처리 할 수 ​​있습니다,하지만 난 아니에요이 정확히 해당하는 경우 있는지, 내가 BSON는 UTF-16 또는 UTF-32 코드 / 디코드 데이터를 사용하는 막연한 생각을 가지고 있지만, 내가 할 수있는 것을 언급 t 지금 확인.

  2. ==============================

    2.@gates 말했듯 BSON 모든 문자열 데이터는 UTF-8 인코딩된다. MongoDB를이 가정합니다.

    @gates 말했듯 BSON 모든 문자열 데이터는 UTF-8 인코딩된다. MongoDB를이 가정합니다.

    PHP는 유니 코드를 인식하지 : 어느 대답 주소 또 다른 주요 포인트. 어쨌든 5.3를 사용합니다. PHP 6 가정 유니 코드 인식 될 것입니다. 이것이 의미하는 바는 인코딩이 운영 기본적으로 시스템 및 어떤 PHP가 사용하는 인코딩에 의해 사용되는 것을 알 필요가있다.

    의 원래의 질문으로 돌아 가자 "이 프로세스를 자동화 할 수있는 방법이 있습니까?" ... 내 제안은 당신은 항상 당신의 응용 프로그램 전체에서 UTF-8을 사용하고 있는지 확인하는 것입니다. 설정, 입력, 데이터 저장, 프리젠 테이션, 모든 것을. 그런 다음 "자동화"부분은 항상 UTF-8로 가정하기 때문에 PHP 코드의 대부분은 간단 할 것입니다. 아니 전환이 필요합니다. 빌어 먹을, 아무도 자동화 쌌다 말했다. :)

    다음은 제쳐두고의 종류입니다. 당신이 시험에 파일을 인코딩하는 것이 무엇인지 그 인서트 () 코드, 그림 약간의 PHP 스크립트를 작성한 경우, 다음 삽입하기 전에 UTF-8로 변환합니다. 이 파일은 ISO-8859-1 알고있는 경우 예를 들어,이 시도 :

    $title = mb_convert_encoding("Péter", "UTF-8", "ISO-8859-1");
    $db->collection->insert(array("title" => $title));
    
  3. ==============================

    3.데이터가 BSON에 저장되지 않습니다. BSON 사양에 따르면, 모든 문자열은 UTF-8입니다.

    데이터가 BSON에 저장되지 않습니다. BSON 사양에 따르면, 모든 문자열은 UTF-8입니다.

    당신이 출력 웹 페이지에 데이터를하려고하는 것 같은데. 이미 인코딩 된 "디코드"텍스트에 필요로하는 것은 잘못된 것 같다.

    이 출력 문제는 아파치 + PHP와 구성 문제가 될 수 있을까요? UTF8 + PHP는 빠른 온라인 검색이 주제에 대한 몇 가지 자습서를 가져, 자동 없습니다.

  4. from https://stackoverflow.com/questions/5920626/mongodb-php-utf-8-problems by cc-by-sa and MIT license