2012-12-20 5 views
1

유니 코드 문자와 관련된 문제가 있습니다. 사용자가 유니 코드 글 머리 기호 문자가있는 문자열을 입력하면 mysql은 해당 필드를 저장할 수 없으며 나머지 업데이트 쿼리도 작동합니다. 여기에 내가 어떻게 대처하려고 노력 했나. 유니 코드 글 머리 기호 문자 제거

$str = preg_replace("\u2022", "•", $str); 

$str = "· Close up the server";

는 ... 그러나 이것은 여전히 ​​작동하지 않습니다.

+0

'$ str = preg_replace ("·", "•", $ str);'시도 했습니까? – Vladimir

+0

'$ str = htmlentities ($ str)'을 사용해 보셨습니까? – GolezTrol

+0

@Vladimir 포인트가 – samayo

답변

4

데이터베이스, 양식 제출 및 소스 코드 문자열 리터럴이 모두 관련되어 있으므로 여기에서 많은 문제가 발생할 수 있습니다. 다른 일반 인코딩 (CP1252, Latin1)을 사용하면 json_을 사용하거나 ~ 200 가지 이상의 다른 문자를 사용할 때 엉망이되기 때문에 UTF-8을 사용한다고 가정합니다.

먼저 할 일은 인코딩 문제를 해결하려는 의도로 작성된 모든 종류의 변환 등 코드를 제거하는 것입니다. utf8_encode, htmlentitites, *_replace 등이 있습니다.


소스 인코딩.

$str = "· Close up the server"; 

위의 내용을 작성할 때 PHP 소스 파일은 실제로 UTF-8로 인코딩되어야합니다. Windows 사용자 인 경우 명시 적으로 수행하거나 구성해야합니다. UTF-8은 Windows에서 마술처럼 생기지 않습니다. 사용자가 양식을 제출하면


양식

을 제출, 페이로드는 당신이 될 수있는 페이지를 선언 어떤 인코딩에있을 것입니다. 당신은 너무처럼 선언 할 수 있습니다 : 당신이 입력하기 전에 UTF-8에 확인해야하므로

header("Content-Type: text/html; charset=utf-8"); 

그러나 사람이 실제로 서버에 임의의 바이트를 제출할 수 있습니다. mb_check_encoding이 좋습니다.


데이터베이스

이 시점에서 데이터가 UTF-8로오고 있기 때문에, 사용자의 입력 문자열은 UTF-8에 있습니다. 연결 인코딩을 지정하여 데이터베이스에 연결 한 후이 값을 지정해야합니다.

mysql_set_charset("utf8"); //After making the connection, and before any queries 
//or $mysqli->set_charset("utf8"); 

그러면 데이터베이스가 사용자 입력을 UTF-8로 읽고 UTF-8로 출력을 인코딩합니다. 또한 열/테이블/데이터베이스를 UTF-8로 설정할 수도 있습니다.


유니 코드 이스케이프 시퀀스 \uxxxx 또는 \uhhhh\ullll 또는 \Uxxxxxxxx는 PHP에서 지원되지 않습니다.

2

\u2022은 "Bullet"을 인코딩하는 UTF-16 16 진수입니다. 아니 UTF-8.

SET NAMES 'UTF-8'; 또는 데이터베이스를 열기 전에 charset을 변경해야 할 수도 있습니다.

+0

@ficuscr 나는 이해 부족이 downvote를 보증한다고 생각하지 않는다. OP가 이해의 부족이 없다면, 그는 우선 질문을하지 않았을 것입니다. 누군가 질문을 할 때, 보통 "이해가 부족하기"때문입니다. 그 논리로, 우리는 모든 질문에 대해 하향식을해야합니다. 왜냐하면 그들은 "이해가 부족하다"는 대답을 요구하기 때문입니다. –

+0

@ SkeetsO'Reilly는 이것을 전혀 기억하지 않습니다. 내가 다른 대답을 말하는지 궁금한가요? 감사. – ficuscr

관련 문제