2010-05-09 1 views
1

latin1에서 utf8로 변경되었습니다. 모든 종류의 텍스트가 훌륭하게 표시되었지만 비 영어 문자가 이상한 기호로 데이터베이스에 저장되어 있음을 알았습니다. 나는 그것을 고치려고 하루를 보냈고 마침내 지금은 영어가 아닌 문자가 데이터베이스에 영어가 아닌 문자로 표시되고 브라우저에서도 똑같이 표시됩니다. 그러나 나는 아포스트로피가 '과 느낌표가 !으로 저장된 것으로 나타났습니다. 이것은 정상입니까, 아니면 '와!'로 나타나야합니까? 대신 데이터베이스에? 그렇다면 그 문제를 해결하기 위해 무엇을해야합니까?mysql 데이터베이스에 아포스트로피, 느낌표 등 저장

+1

문자 집합을 어떻게 변경 했습니까? ['CONVERT TO CHARACTER SET'] (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html#id2295176) 또는 다른 것을 사용합니까? "영어 이외의"문자가 이상하게 저장되었는지 어떻게 확인 했습니까? DB에서 어떻게 그 캐릭터를 변경 했습니까? 'htmlspecialchars' /'htmlentities' 사용 하시겠습니까? – outis

+0

phpmyadmin을 사용하여 데이터베이스, 테이블 및 컬럼을 수동으로 변경했습니다. 지루한 일 이었기 때문에이 스크립트를 사용하여 나머지 작업을 수행했습니다. http://scackoverflow.com/questions/105572/a-script-to-change-all-tables-and-fields-to-the- utf-8-bin-collation-in-mysql – rein

답변

0

정말 데이터베이스의 내용으로 무엇을 할 것인가에 달려 있습니다. 귀하의 invariant가 "데이터베이스의 내용이 더 이상 유효성 검사/위생 처리없이 웹 페이지에 직접 위생 될 수 있습니다."라는 메시지가 표시되면 & amp; 데이터베이스의 다른 HTML 엔티티는 완벽합니다. 반면에 데이터베이스가 원본 원본 데이터 만 저장하고 HTML 코드로 표시하기 전에 처리/위생 처리하려는 경우 UTF를 사용하여 인코딩 된 원본 문자로 대체해야합니다 -8. 따라서 데이터베이스 내용을 해석하는 방법에 따라 달라집니다.

+0

응용 프로그램은 유료 포럼 소프트웨어 스크립트입니다. 이 경우 엔티티를 저장해야한다고 생각합니까? – rein

0

&#XX; 양식은 HTML character entities이며 PHP의 htmlspecialchars 또는 htmlentities과 같은 기능을 통해 데이터베이스에 저장된 값을 전달했다는 의미입니다. 값이 HTML 문서 (또는 HTML 처리기의 일부인지 여부에 관계없이) 내에서 처리되면 정상적으로 표시되어야합니다. 그 밖에서 그들은 그렇게하지 않을 것입니다.

이것은 HTML 엔티티로 인코딩 된 상태로 유지하고 싶지 않음을 의미합니다. 값을 인코딩 할 때 사용한 함수의 값 (예 : html_entity_decode)을 사용하여 값을 다시 변환 할 수 있습니다.이 값은 변환 할 인코딩을 인수로 받아야합니다. 작업을 마친 후에는 문제가되는 항목을 확인하고 올바른 인코딩을 사용하여 항목을 확인하십시오.

여전히 문제가있는 경우 저장된 값의 인코딩이 실제로 사용하고있는 인코딩과 일치하지 않습니다. 실제로 사용하는 것을 파악한 다음 DB에서 가져 와서 다시 삽입하거나 대상 인코딩으로 변환 한 다음 실제로 사용하는 인코딩으로 다시 삽입해야합니다. . 후자의 옵션과 마찬가지로 열을 BLOB s로 변환 한 다음 열 문자 집합을 변경하고 열 유형을 다시 텍스트 유형으로 변경 한 다음 열을 원하는 문자 인코딩으로 직접 변환합니다. 이 다루기 힘든 순서의 이유는 문자 인코딩을 변경할 때 텍스트 유형이 변환되지만 이진 유형은 변환되지 않기 때문입니다.

일반적으로 문자 인코딩에 대한 자세한 내용은 "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)"이고, MySQL에서는 인코딩 방법이 § 9.1.4. of the MySQL manual, "Connection Character Sets and Collations"입니다.

+0

내가 사용하고있는 응용 프로그램은 포럼 스크립트이며 코드에 익숙하지 않습니다. 그것은 그들이 뭔가 잘못하고 있다는 것을 의미합니까? 즉, 응용 프로그램에 문제가 있습니까? 아니면 어떻게 데이터베이스를 설정합니까? 거기에 문제가 응용 프로그램, DB, 서버, 등 여부를 확인하는 쉬운 방법이 있나요. – rein