저는 데이터베이스에 저장할 utf-8 코어로 변환 된 문자 묶음을 얻는 데 어려움을 겪고 있습니다.특수 문자 (html_entity_decode, iconv 등)로 어려움을 겪고 있습니다.
PHP iconv가 여러 문자에서 실패하므로 내 자신의 '솔루션'을 만들어야합니다. 실제로 작동하지 않으면 솔루션이 아니며 Windows에서 거의 완전히 실패하므로 iconv는 테스트 서버에서 'dev'를 사용해야하므로 대부분 효과가 없습니다. 또한, iconv 많은 문자를 그리워, 그것은 전혀 도움이되지 않습니다. 여기
내가 그것은 가끔 기능을 대체 할 여러에서 동일한 문자를 가지고 비효율적 보일 수function replace_accents($string) { return str_replace(array('à','á','â','ã','ä', 'ç', 'è','é','ê','ë', 'ì','í','î','ï', 'ñ', 'ò','ó','ô','õ','ö', 'ù','ú','û','ü', 'ý','ÿ', 'À','Á','Â','Ã','Ä', 'Ç', 'È','É','Ê','Ë', 'Ì','Í','Î','Ï', 'Ñ', 'Ò','Ó','Ô','Õ','Ö', 'Ù','Ú','Û','Ü', 'Ý'), array('a','a','a','a','a', 'c', 'e','e','e','e', 'i','i','i','i', 'n', 'o','o','o','o','o', 'u','u','u','u', 'y','y', 'A','A','A','A','A', 'C', 'E','E','E','E', 'I','I','I','I', 'N', 'O','O','O','O','O', 'U','U','U','U', 'Y'), $string); } function replaceQuote($string){ $replaceQuote=array('‘', '’', '“', '”', ''','‚','„',''',"’"); return str_replace($replaceQuote,'\'', $string); } function replaceArray($string){ $replaceArray=array('—', '™','™','™','©', '®', '®','©', '¡', '¡', '¢', '¢', '£', '£', '¤', '¥', '¥', '¦', '§', '§', '«', '«', '¬', '¬', '', '¯', '¯', '²', '³', 'µ', 'µ', '¶', '¶', '·', '·', '¸', '¸', '¹', 'º', 'º','»', '‹', '»','¼', '½','¾','♥', '☆', '☠', '░','▒','▓','█', '★', '♪','♫','◄','▀','▄','►', '¤', '^', '☣', '…', '†', '‡', '.:','♣','Ξ','ξ','↠','⇒','→','↞','⇐','←', '⇔','↔','','♠','&loz','√','∩','&Cap','∴'); return str_replace($replaceArray, '', $string); } function special_replace($string){ $replace_from=array('ƒ', 'Œ','œ','•', '–', '—','˜','š','Š','Ÿ','ÿ','ε', '€','α','Α','τ','Τ','θ','Θ'); $replace_to=array('ƒ', 'Œ','œ','•','-','-','~','š','Š','Ÿ','ÿ','ε','€','α','Α','τ','Τ','θ','Θ'); return str_replace($replace_from, $replace_to, $string); } function dbSlug($slugIt){ $slugIt=html_entity_decode($slugIt); $slugIt=replaceArray($slugIt); $slugIt=replaceQuote($slugIt); $slugIt=special_replace($slugIt); //$slugIt=iconv('ISO-8859-1', 'UTF-8//TRANSLIT//IGNORE', $slugIt); $slugIt=replace_accents($slugIt); $slugIt=trim($slugIt); return $slugIt; }
을하고 내 기능을 가지고 무엇을하지만 난 다른 방법으로 여러 위치에 기능을 사용하므로,이 왜 나는 하나 이상의 교체 기능에서 동일한 특성을 가질 수 있습니다.
이제는 데이터를 볼 때마다 문자를 찾고 바꾸거나 제거하는 미로를 통해 잡히지 않는 또 다른 특수 문자가 있음을 발견했습니다.
현재 불쾌감을주는 캐릭터는 '무해한 것'이라고 생각합니다. 데이터베이스에서 'Â'로 끝나는 항목이 있습니다. 모든 공간이 당신을 염두에 두지는 않는다. 그것은 단지 일부 공간에만 영향을 미친다 (나는 아직 이유를 알지 못했다).
나는 1 주일 이상이 시간을 보냈고, 돌아가서 볼 때마다 '수정'에 더 많은 것을 추가했습니다.
나는 'Â'를 제거하는 방법을 묻지 않고 있는데, 콘텐츠/데이터의 무결성을 유지하는 방법에 대한 해결책을 얻으려고하지만 데이터를 이동할 때 때로는 엉망이되는 특수 문자는 필요하지 않기를 바라고 있습니다. 검색 가능성을 유지합니다.
나는
preg_replace("/[^a-zA-Z0-9,-\'-!&.etc]/", "", $data);을 할 것이지만, 놓친 특수 문자가 바뀌면 단어가 엉망이되기 시작할 것이라고 염려합니다. 나는 'Mxico'가 'Mxico'에서 나왔던이 경험을 이미 가지고 있기 때문에 그냥 작동하지 않습니다.
문자 인코딩은 인코딩 전에 ISO-8859-1로 헤더를 변경하거나 인코딩을 설정하지 않았지만 항상 같은 결과를 얻었지만 문자 인코딩은 UTF-8로되어 있습니다.
나는 아마도 이것이 가능한 가장 최악의 방법 일 것이라고 확신하지만 효과적인 해결책을 찾을 수 없었습니다. 어떤 제안? 내 관심은 이것이 거의 끝나지 않고 항상 번역의 미로를 통해 놓친 새로운 인물을 찾고 있다는 것입니다.
mysql에 utf8로 인코딩 된 문자를 저장하는 방법에 대한 실제적인 문제는 해결하려고합니까? 이 모든 음역 코드는 mysql 연결 문자셋에 문제가 있음을 나타내므로 실제로 utf8 문자를 보낼 수 없습니다. – VolkerK
모든 코드가 utf8로 인코딩 된 문자를 저장하는 것이 아니라 일부는 실제로 '★'와 같이 쓸모없는 문자를 제거하는 것입니다. 문제는 두 가지로 보일 수 있습니다. eyze의 대답은 내가 이미 벗겨 낸 물건/교체 된 물건을 정리하는 것 같았다. 불행히도 내 서버가 파일에서 인코딩을 허용하지 않는 것 같습니다. 그래서 제거 된 (또는 시도한) 문자는 여전히 제거되지 않습니다. – pedalpete