[MONGODB] MongoDB를 PHP의 UTF-8 문제
MONGODBMongoDB를 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.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.@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.데이터가 BSON에 저장되지 않습니다. BSON 사양에 따르면, 모든 문자열은 UTF-8입니다.
데이터가 BSON에 저장되지 않습니다. BSON 사양에 따르면, 모든 문자열은 UTF-8입니다.
당신이 출력 웹 페이지에 데이터를하려고하는 것 같은데. 이미 인코딩 된 "디코드"텍스트에 필요로하는 것은 잘못된 것 같다.
이 출력 문제는 아파치 + PHP와 구성 문제가 될 수 있을까요? UTF8 + PHP는 빠른 온라인 검색이 주제에 대한 몇 가지 자습서를 가져, 자동 없습니다.
from https://stackoverflow.com/questions/5920626/mongodb-php-utf-8-problems by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] Node.js를, 몽고의 발견 및 반환 데이터 (0) | 2019.12.18 |
---|---|
[MONGODB] 어떻게 글래스 피쉬에 제 3 자 라이브러리를 사용 하는가? (0) | 2019.12.18 |
[MONGODB] 자바 드라이버 MongoDB를 집계 (0) | 2019.12.18 |
[MONGODB] 캔트 사용 몽고 명령, 쇼는 맥을 찾을 수 없습니다] 명령 (0) | 2019.12.18 |
[MONGODB] 몽고와 배열 객체의 필드에 대한 쿼리? (0) | 2019.12.17 |