다음 정규 표현식을 사용하여 값을 데이터베이스에 삽입하기 전에 사용자 입력에서 비 인쇄 제어 문자를 제거합니다.preg_replace는 비 인쇄 문자를 제거합니다. 외래 문자도 모두 제거합니다.
preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value)
utf-8 문자열에이 문제가 있습니까? 모든 비 ASCII 문자를 완전히 제거하는 것 같습니다.
다음 정규 표현식을 사용하여 값을 데이터베이스에 삽입하기 전에 사용자 입력에서 비 인쇄 제어 문자를 제거합니다.preg_replace는 비 인쇄 문자를 제거합니다. 외래 문자도 모두 제거합니다.
preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $value)
utf-8 문자열에이 문제가 있습니까? 모든 비 ASCII 문자를 완전히 제거하는 것 같습니다.
문제의 일부는 대상을 UTF-8 문자열로 취급하지 않는다는 것입니다. 이를 위해 /u
수정자가 필요합니다. 또한 UTF-8에서 ASCII가 아닌 문자는 두 개 이상의 바이트로 표시되며 모두 \x80..\xFF
범위에 있습니다. 이 시도 :
preg_replace('/\p{Cc}+/u', '', $value)
\p{Cc}
가 제어 문자의 유니 코드 속성이며, u
원인 모두 정규식 대상 문자열이 UTF-8로 처리 할 수 있습니다.
사용할 수 Unicode character properties
preg_replace('/[^\p{L}\s]/u','',$value);
더는 fullproof하지만 일부 좋은 번역과 의미로는, ASCII로 유니 코드를 되돌리려하지 않는 경우
을 (당신은을 통해 수 있도록 할 다른 클래스를 추가 수행) :
echo iconv('utf-8','ascii//translit','éñó'); //prints 'eno'
폴란드어 보조 문자 (예 : ± ńśś)와 같이 ASCII 범위를 벗어나는 유효한 문자를 남기시겠습니까? 나는 유효하지 않은 UTF-8 시퀀스를 제거 할 정규 표현식을 찾고있다. (그래서 MySQL은 데이터베이스에 그러한 문자열을 삽입하는 동안 불평하지 않을 것이다.) 그러나 다른 모든 것은 그대로 둔다. – pako
''/ \ P {Any}/u '' - Any는 자명하고'\ P {}'(대문자)는'\ p {}'. 그러나 나는 그 무효 바이트 순서가 처음에 어떻게 들어 왔는지에 더 관심이 있습니다. –