2017-11-20 4 views
0

특수 문자를 제거하는 PHP 스크립트가 있지만 불행히도 일부 중국어 문자도 제거됩니다.PHP str_replace가 중국어 문자를 실수로 제거하는 중

<?php 

function removeSpecialCharactersFromString($inputString){ 
    $inputString = str_replace(str_split('#/\\:*?\"<>|[]\'_+(),{}’! &'), "", $inputString); 
    return $inputString; 
} 

$test = '赵景然 赵景然'; 
print(removeSpecialCharactersFromString($test)); 

?> 

이상한 결과는 赵然 赵然입니다. 문자 이 제거되었습니다.

또한 陈 一도 제거됩니다. 가능한 원인은 무엇일까요?

+1

'str_replace' 멀티 바이트 안전하지 않습니다. 'preg_replace()'를 대신 사용하십시오. – Simba

+0

이 데이터를 인코딩하는 데 UTF8을 사용하고 있다고 생각하지 않습니다. 다중 바이트 안전하지 않은 문자열 함수를 사용하고 있어도 필터 문자열에 지정된 것과 같이 하위 순서가 아닌 단일 바이트 시퀀스에는 사용할 수 없기 때문에 더 긴 UTF8 시퀀스에서 발생합니다. 그러나 데이터가 실제로 UTF16으로 인코딩 된 경우 대부분의 아시아 언어 스크립트에서 가장 효율적이므로이 경우 문자열이 그대로 손상됩니다. – Sammitch

답변

1

대체하려는 항목의 목록으로 사용되는 문자열이 혼합 인코딩과 잘 작동하지 않습니다. 내가 한 것은이 문자열을 UTF16으로 변환 한 다음 분할하는 것입니다.

제공
function removeSpecialCharactersFromString($inputString){ 
    $inputString = str_replace(str_split(
      mb_convert_encoding('#/\\:*?\"<>|[]\'_+(),{}’! &', 'UTF16')), "", $inputString); 
    return $inputString; 
} 
$test = '#赵景然 赵景然'; 
print(removeSpecialCharactersFromString($test)); 

... BTW

赵景然赵景然 

-str_replace은 MB 안전 - 종류의 포스터를 인정 ... http://php.net/manual/en/ref.mbstring.php#109937

관련 문제