2011-04-19 3 views
0

나는 fgetcsv사용자 제출 된 CSV 파일 업로드 UTF-8 우려

내 데이터베이스가 설정되어 utf8_general_ci 및 웹 사이트의 캐릭터 세트의 정렬을 사용

UTF-을 사용하여 CSV 내 데이터베이스에 파일을 제출 한 사용자가 업로드 기능이 있습니다 8.

웹 사이트에 표시하기 위해 CSV의 데이터를 데이터베이스에 삽입 할 때 올바른 인코딩이 설정되도록하려면 어떻게해야합니까?

모든 문자열을 mb_detect_encoding (비트 메모리를 많이 사용하는 것 같습니다)과 같은 코드를 사용하여 테스트해야합니까, 아니면 utf8_encode 전체 문자열을 테스트해야합니까? 아니면 전혀 걱정하지 않아도 될까요?

답변

1

사용자 제출 파일의 인코딩을 자동 감지하는 것은 실제로 매우 불안정합니다.

수동 접근 방식을 고려
  • 사용자가 파일을 업로드하게한다.

  • iframe에는 데이터 삽입 방법에 대한 미리보기를 보여줍니다. (OpenOffice는 알 수없는 파일을 스프레드 시트로 가져올 때처럼). 그 그림은 here

  • 다음으로 모든 관련 인코딩을 제공하는 드롭 다운을 보여줍니다. 사용자가 다른 인코딩으로 전환하면

  • 이 미리 업데이트 즉석 iconv() 사용 :

    $data = iconv($chosen_encoding, "utf-8", $data); 
    
  • 사용자가 수행 된 데이터는 선택된 인코딩 올바르게 표시를 확인되면 데이터에있는 iconv()의 최종본을 찾아 데이터베이스에 삽입하십시오.

이의 단점은 사용자들이 대부분의 가능성이 무지, 그리고에 바르게 관심이없는 걸 문제에 대해 교육 할 필요가있다. 그러나이 들어가는 데이터를 확인하는 유일한 방법이다 시스템은 괜찮습니다. 귀하의 코멘트를 다시

는 :

정말 사용자에게이 투명하게하고 싶다. 문자열에 utf8_encode를 사용하면 적어도 인코딩에 관계없이 적절한 인코딩이 설정되는지 확인하거나 모든 데이터를 스크류합니까?

utf8_encode은 iconv ("iso-8859-1", "utf-8", $ data)의 동의어입니다. 들어오는 데이터가 ISO-8859-1이 아닌 경우 프로세스에 의해 엉망이됩니다. 까다로운 문제입니다.

투명해야하는 경우 불행히도 전체 파일에서 mb_detect_encoding으로 행운을 빕니다. ISO-8859-1 및 UTF-8은 동일한 기본 (ASCII) 문자 집합을 공유하지만 Umlauts ÄÖÜ과 같은 모든면에서 다릅니다. 파일이 전 세계에서 온다면 탐지를 인코딩하는 것은 쓸모에 가까운

참고

+0

난 정말 사용자에게이 투명하게하려면 (즉. 어떤 인코딩을 가질 수있다).문자열에 utf8_encode를 사용하면 적어도 인코딩에 관계없이 적절한 인코딩이 설정되는지 확인하거나 모든 데이터를 스크류합니까? – fire

+0

*이 주석의 내용을 대답에 넣었습니다. * –

+0

예, 생각했던 것입니다! 젠장, 문자 인코딩! – fire