(주석 질문 참조) 때문에 php string type
는 내부적으로 PHP 문자열은 바이트 배열 인 문자 배열로 문자열 작업을 나쁜 생각이었다. 결과적으로 배열 대괄호를 사용하여 문자열에 액세스하거나 수정하는 것은 다중 바이트 안전이 아니므로 ISO-8859-1과 같은 단일 바이트 인코딩의 문자열로만 수행해야합니다.
그래서 우리는 UTF-8 mb_substr
를 사용 및 기호하지 바이트
error_reporting('E_ALL & !E_NOTICE');
$yourString = "test bad ☺ string";
$convertString = '';
$badChars = [];
if (iconv("UTF-8", "Windows-1252", $yourString) === false) {
for($i = 0, $stringLength = mb_strlen($yourString); $i < $stringLength; $i++) {
$char = mb_substr($yourString, $i, 1);
$convertChar = iconv("UTF-8", "Windows-1252", $char);
if ($convertChar === false) {
$badChars[$i] = $char;
} else {
$convertString .= $convertChar;
}
}
} else {
$convertString = iconv("UTF-8", "Windows-1252", $yourString);
}
var_dump($badChars, $convertString);
결과 array(1) { [9]=> string(3) "☺" } string(16) "test bad string"
P.S. 작업 할 수 있습니다 다음 번에는 코드에 대한보다 자세한 답변을 드릴 것입니다. 내 실수
나는 char 배열로 문자열을 사용하고 char에 iconv를 사용할 수 있다고 생각한다. –
@VladLatish 고맙습니다 - 분명했습니다. 그러나 나는 그것에 대해 생각하지 않았습니다. 답으로 게시하십시오. 이 방법을 사용하여 나는 불쾌한 인물을 식별 할 수있었습니다. – SquareCat
그들의 * "나는 생각한다"*는 많은 답변을 얻지 못합니다. @ VladLatish가 충분한 컨텍스트와 코드로 답변을 게시 할 수 없다면, 그 사람에게는별로 도움이되지 않을 것입니다. –