이 질문에 대한 답변을 찾을 수 없습니다.PHP에서 preg_match를 사용할 때 멀티 바이트 문자열에 신경 써야합니까?
내 패턴에 ASCII 범위를 벗어나는 문자가 포함되어 있지 않으면/u 수정자가 필요합니까? 설명서에없는 것으로 보입니다. 일치하는 문자열이 UTF-8 인 경우 계속 원하는 문자와 일치합니까?
감사
이 질문에 대한 답변을 찾을 수 없습니다.PHP에서 preg_match를 사용할 때 멀티 바이트 문자열에 신경 써야합니까?
내 패턴에 ASCII 범위를 벗어나는 문자가 포함되어 있지 않으면/u 수정자가 필요합니까? 설명서에없는 것으로 보입니다. 일치하는 문자열이 UTF-8 인 경우 계속 원하는 문자와 일치합니까?
감사
나는 내 앞에있는 PHP 환경이 없기 때문에 내가 두 번째 질문을 테스트 할 수 없습니다,하지만 첫 번째 질문에 대한 대답은 NO입니다. ASCII 문자 만 처리하는 경우에는 /u
이 필요 없습니다.
패턴에 utf 문자가 포함되어 있는지 여부는 아니지만 일치하는 문자열과 일치하는지 여부는 아닙니다. 비 ASCII 문자를 찾지 못할 수도 있지만 문자열에 멀티 바이트 문자가있는 경우 패턴은 UTF 문자의 "추가"바이트 중 하나와 일치 할 수 있습니다.
멀티 바이트 시퀀스가 7 비트 ASCII 코드를 바이트로 포함하지는 않지만 UTF-8의 요점은 아닙니까? 따라서 정규식 엔진이 8 비트 정리 인 경우 멀티 바이트 내용에 관계없이 UTF-8로 인코딩 된 문자열의 ASCII 문자와 일치하지 않아도 괜찮습니다. 결국 모든 멀티 바이트 UTF-8 시퀀스에는 항상 첫 번째 비트가 설정된 바이트가 있습니다. –
예를 들어 단일 문자 문자열과 일치하는 /^.$/
을 가져옵니다.
var_dump(preg_match('/^.$/u','族'));
var_dump(preg_match('/^.$/','族'));
결과 :
int(1)
int(0)
그래서 예/u는 당신의 패턴이 아스키 테이블 외부 문자가없는 경우에도 변화를 않습니다.
사용해 보셨습니까? :) – Furicane