유니 코드 문자와 관련된 문제가 있습니다. 사용자가 유니 코드 글 머리 기호 문자가있는 문자열을 입력하면 mysql은 해당 필드를 저장할 수 없으며 나머지 업데이트 쿼리도 작동합니다. 여기에 내가 어떻게 대처하려고 노력 했나. 유니 코드 글 머리 기호 문자 제거
$str = preg_replace("\u2022", "•", $str);
$str = "· Close up the server";
유니 코드 문자와 관련된 문제가 있습니다. 사용자가 유니 코드 글 머리 기호 문자가있는 문자열을 입력하면 mysql은 해당 필드를 저장할 수 없으며 나머지 업데이트 쿼리도 작동합니다. 여기에 내가 어떻게 대처하려고 노력 했나. 유니 코드 글 머리 기호 문자 제거
$str = preg_replace("\u2022", "•", $str);
$str = "· Close up the server";
데이터베이스, 양식 제출 및 소스 코드 문자열 리터럴이 모두 관련되어 있으므로 여기에서 많은 문제가 발생할 수 있습니다. 다른 일반 인코딩 (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에서 지원되지 않습니다.
\u2022
은 "Bullet"을 인코딩하는 UTF-16
16 진수입니다. 아니 UTF-8
.
SET NAMES 'UTF-8';
또는 데이터베이스를 열기 전에 charset을 변경해야 할 수도 있습니다.
@ficuscr 나는 이해 부족이 downvote를 보증한다고 생각하지 않는다. OP가 이해의 부족이 없다면, 그는 우선 질문을하지 않았을 것입니다. 누군가 질문을 할 때, 보통 "이해가 부족하기"때문입니다. 그 논리로, 우리는 모든 질문에 대해 하향식을해야합니다. 왜냐하면 그들은 "이해가 부족하다"는 대답을 요구하기 때문입니다. –
@ SkeetsO'Reilly는 이것을 전혀 기억하지 않습니다. 내가 다른 대답을 말하는지 궁금한가요? 감사. – ficuscr
'$ str = preg_replace ("·", "•", $ str);'시도 했습니까? – Vladimir
'$ str = htmlentities ($ str)'을 사용해 보셨습니까? – GolezTrol
@Vladimir 포인트가 – samayo