정말 고맙겠습니다. 나는이 문제에 대한 시절을 낭비했고, 온라인에서 발견 한 제안 중 어느 것도 나에게 수정을주는 것처럼 보이지 않는다.PHP - 이상한 문자를 제거 할 수 없습니다.
나는 공급자로부터받은 CSV 파일을 가지고 있습니다. Microsoft 시스템에서 내 보낸 것으로 보입니다.
PHP를 사용하여 MySQL로 데이터를 가져오고 있습니다 (최신 버전 모두).
필자가 제거 할 수없는 이상한 문자가 포함 된 특정 레코드가 하나 있습니다. 문자를 제거하는 수동 편집은 가능하지만 하루에 여러 번 발생하므로 자동화 된 솔루션을 선호합니다.
"스마트 쿼트"의 해석 인 것처럼 보입니다. 16 진수 편집기는 문자 코드가 C2와 92라는 것을 알려줍니다. 16 진수 편집기에서는 이상한 A 다음에 똑똑한 따옴표가옵니다. 다른 편집기와 Calc, Writer 등에서는 그냥 상자로 나타납니다. 내
인코딩을 결정하기 위해 mb_detect_encoding을 사용하고 있습니다. CSV 파일의 모든 레코드는 UTF-8로 반환되는 이상한 문자가있는 문자를 제외하고는 ASCII로 반환됩니다. 문제가되는 레코드를 MySQL에 삽입 할 수 있으며 워크 벤치의 사각형으로 나타납니다.
MySQL 테이블은 utf-8 – utf8_unicode_ci
으로 구성되며 다른 비정상적인 UTF 문자 (예 : 분수)는 정상입니다.
나는이에 대한 해결책을 많이 해봤 ...
- How to detect malformed utf-8 string in PHP?
- Remove non-utf8 characters from string
- Removing invalid/incomplete multibyte characters
- How to detect malformed utf-8 string in PHP?
- How to replace Microsoft-encoded quotes in PHP
등 C 등. 그러나 그들 중의 누구도 나를 위해 일하지 않았다.
내가 정말로하고 싶은 것은 불쾌한 캐릭터를 제거하거나 대체하는 것입니다. 이상적인 것은 검색하고 16 진수 값을 바꾸는 것입니다. 그러나 제가 시도한 예제 중 아무 것도 시도하지 않았습니다.
아무도 나를 도와 줄 수 없습니까?
편집 :
이 충분하지 않은 평판으로 대답을 게시 할 수 없습니다 귀하의 의견
감사합니다. 매우 감사.
난 그냥 육각 검색을 가서 대체하는거야 :
$DodgyText = preg_replace("/\xEF\xBE\x92/", "" ,$DodgyText);
나는 우아한 해결책이 아니다 알고,하지만 난 빠른 수정이 필요하고이 나를 위해 작동합니다.
'C292'는 AFAIK 유효한 UTF-8/유니 코드 코드 포인트가 아닙니다 ... WTF, Microsoft? – deceze
preg_replace()가 필요없고 발견 한 실제 16 진수 값을 기반으로 답변을 업데이트했습니다. –