2010-05-13 4 views
2

PHP 애플리케이션을 새 서버로 옮겼습니다. 나는 mysql5 db를 사용한다. 업데이트 또는 DB에 뭔가를 삽입 할 때마다 "- 기호가 ?으로 변경되었습니다. SET NAMES UTF8SET CHARACTER SET을 사용하지만 작동하지 않습니다. 어떤 아이디어?mysql and encoding

답변

0

내 생각 엔 당신은 각진 꽤 따옴표로 " 변환되는 텍스트 편집기에서 붙여 넣기 및 변화하는 당신의 - 모두 ?로 표현되는 원인이되는 mdash,에.

UTF8 문자를 허용하도록 데이터베이스를 설정하는 동안 웹 서버/PHP에서 해당 문자를 허용하도록 설정하지 않았을 것입니다. mbstring 기능을 사용해보십시오. 그러나 기울어 진 따옴표 나 대시를 사용하지 않았는지 확인하십시오.

+0

다른 방법이 있습니다 이것을하기 위해? 내 PHP 배포판에 추가 패키지를 설치할 수 없으며 mbstring이 설치되지 않은 것 같습니다. – qqryq

+0

잘 모르겠습니다. 따옴표를 변환하기 위해 HTML 인코딩을 시도해 볼 수도 있지만 아마도이 방법이 최선의 방법은 아닙니다. –

2

SET NAMES UTF8은 모든 페이지에서 선택하거나 업데이트하거나 삽입 할 때 사용해야합니다.

실제로이 쿼리는 데이터베이스에 연결할 때마다 사용해야합니다. 코드를 연결하기 만하면됩니다.

(1) 브라우저가 당신에게 UTF로 인코딩 된 문자를 전송하는지 확인하십시오 안정적으로 작동 및 기타 비 ASCII 문자 - ("")

+0

그것은 everywere입니다, 나는 그것을 어디에나 포함 db_connect.php 파일에 있습니다. – qqryq

1

당신은 스마트 인용 및 대시를 만들기 위해를 통해 UTF-8 모든 방법이 필요합니다 -8. 양식을 UTF-8로 포함하는 페이지를 선언하여이 작업을 수행 :

<head> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> 
    ... 

. (IE에서 잘 작동하지 않습니다 <form accept-encoding>을 무시)

(2) 원시 바이트 PHP 상품 및 그것들이 어떤 인코딩인지는 신경 쓰지 않지만 데이터베이스는주의를 기울이기 때문에 PHP의 바이트 인코딩이 무엇인지 알려줘야합니다. 이 바람직합니다. mysql_set_charset이 좋을 수도 있습니다.

(3) 일단 적절한 문자가 데이터베이스에 도달하면 모든 문자가 맞는지 확인하기 위해 유니 코드 인코딩으로 저장해야합니다. 각 열은 다른 인코딩을 가질 수 있지만, CREATE table 일 때 DEFAULT CHARACTER SET utf8을 사용하면이 열의 모든 텍스트 열을 UTF-8로 사용할 수 있습니다. 원하는 경우 데이터베이스 또는 전체 서버의 기본 문자 집합을 utf8으로 설정할 수도 있습니다.

이미 테이블이 CREATE이고 비 UTF-8 데이터 정렬 인 경우 테이블을 다시 만들거나 alter해야합니다. SHOW FULL COLUMNS FROM sometable;을 사용하여 현재 데이터 정렬을 확인할 수 있습니다.

(4) htmlspecialchars()이 아닌 htmlentities()이 아닌 PHP에서 출력 한 텍스트를 HTML 인코딩해야합니다. 기본적으로 비 ASCII 문자가 엉망입니다.

[(2) 및 (3)의 대안으로, 연결 및 테이블 저장소에 기본 Latin-1 인코딩을 사용하지만 UTF-8 바이트를 넣을 수 있습니다. 이 접근 방식의 단점은 데이터베이스를보고있는 다른 도구에서 잘못 보일 것이고 대/소문자가 대/소문자를 구분하지 않는 방식으로 서로 비교하지 않는다는 것입니다.

+0

나는 이미 UTF8 charset 헤더를 내 페이지 상단에 놓았지만 ""와 같은 형식으로 양식을 제출할 때 도움이되지 않았습니다. phpMyAdmin에서 확인하여 '?'로 변경했습니다. 나는 이유를 모른다. – qqryq

+0

테이블에 UTF-8이 저장되어 있지 않은 것 같습니다. 요점 (3)을 확인하십시오. – bobince