2016-11-17 6 views
0

mysql과 php를 사용하고 있습니다.mysql 테이블에서 데이터를 읽을 때 이상한 문자

내 데이터베이스에는 다음과 같은 열 값이 있습니다.

Preaqueça o forno médio (180ºC). 

그러나 PHP를 사용하여 검색하면 아래 문자열이 표시됩니다.

Preaqueu00e7a o forno mu00e9dio (180u00baC). 

문자 인코딩에 문제가 있습니다. 그것을 고칠 어떤 아이디어?

+0

모든 시스템이 올바른 인코딩 (아마 UTF)을 사용하는지 확인하십시오. –

+0

검색 및 표시 위치의 코드를 공유 하시겠습니까? – C2486

+1

테이블 구성이 다음과 같이 속합니다. DEFAULT CHARSET = utf8 – Karthi

답변

0

select 쿼리의 결과를 표시하기 위해 json_encode를 사용하고 있었다. 그것이 문제의 원인이었습니다.

function my_json_encode($arr) 
{ 
     //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding 
     array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); }); 
     return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); 

} 

이 기능은 기본 json_encode 대신 사용됩니다. 완벽하게 작동합니다.

0

두 가지 문제가있는 것 같습니다.

çç 위해 글자 깨짐과 ºº 위해 글자 깨짐입니다. 이를 위해, 당신은 확인해야합니다.

표시)

  • 바이트는 UTF-8 인코딩 할 필요가 저장 될 수 있습니다. 이것을 고쳐라.
  • 텍스트를 INSERT 및 SELECT 할 때 연결은 utf8 또는 utf8mb4를 지정해야합니다. 이것을 고쳐라.
  • 열을 CHARACTER SET utf8 (또는 utf8mb4)로 선언해야합니다. 이것을 고쳐라.
  • HTML은 (으)로 시작해야합니다.

진수 00e7ç의 "유니 코드 코드 포인트"처럼 보인다, 그러나 당신이 그것을 만들 수 있었는지 불분명하다.

무엇을 저장했는지 보려면 SELECT col, HEX(col) FROM ...부터 시작하겠습니다. SHOW CREATE TABLE도 제공하십시오. (Test the data의 세부 정보)

모지 베크 문제를 수정하고 16 진수를 수행 한 후 새로운 질문을 시작하십시오. (나는이 스레드가 지키기에 너무 지저분해질 것을 두려워한다.)