참고 : 질문 제목이 메타 Q&A크롬과 사파리는 UTF8을 다르게 처리합니다. UTF8 문자가 하드 코딩되지 않은 경우 Firefox와 IE가 문제가됩니까?
나는 accent plugin와 jQuery를 bassistance 자동 완성 플러그인을 사용하고 있습니다에서 논의 된 바와 같이 변화, 그래서 악센트가없는 자동 완성 있습니다. 악센트지도는 다음과 같이이다 :
map={'À':'A', 'İ':'I'};
내가 문자 İ
(포인트와 터키어 대문자 I)에 문제가있다. 나는 악센트를 제거하고 소문자로 변환 한 후,이 코드가 있습니다
("İstanbul").indexOf("is")
파이어 폭스와 IE는 0
을 제공하지만, 크롬과 사파리가 -1
을 제공합니다.
charCodeAt(0)
모든 브라우저에서 동일한 결과가 나타납니다.
그것은 크롬과 사파리는 정상 I와 악센트가없는 I 다른 취급 것으로 보인다.
편집
안녕하세요 다시 약 5 개월 만에, 드디어 내 질문에 더 많은 소스를 추가 할 수 있습니다.
다행스럽게도 질문 날짜와 해당 날짜의 백업을 통해 소스 코드를 찾을 수 있습니다.
전 (터키어 İ 버그) 나는 AFTER (WORKS OK)으로 코드를 변경하는 경우가 수정되었습니다. (터키어)
나는 또한 추가 아래 내 문서 charshet
나는 유니 코드 전문가가 아니지만, 당신이 나를 "크롬 FF VS"문제에 대해 추측 할 경우 :
크롬 "소스 코드"로 characther를 처리 난 \
FF "가 표시 characher"로 처리 u0128 같은 말은, "I"
BEFORE (터키어 I 버그)
같은 의미function remove_accent(str) {var map={'À':'A','Á':'A','Â':'A','Ã':'A','Ä':'A','Å':'A','Æ':'AE','Ç':'C','È':'E','É':'E','Ê':'E','Ë':'E','Ì':'I','Í':'I','Î':'I','Ï':'I','Ð':'D','Ñ':'N','Ò':'O','Ó':'O','Ô':'O','Õ':'O','Ö':'O','Ø':'O','Ù':'U','Ú':'U','Û':'U','Ü':'U','Ý':'Y','ß':'s','à':'a','á':'a','â':'a','ã':'a','ä':'a','å':'a','æ':'ae','ç':'c','è':'e','é':'e','ê':'e','ë':'e','ì':'i','í':'i','î':'i','ï':'i','ñ':'n','ò':'o','ó':'o','ô':'o','õ':'o','ö':'o','ø':'o','ù':'u','ú':'u','û':'u','ü':'u','ý':'y','ÿ':'y','Ā':'A','ā':'a','Ă':'A','ă':'a','Ą':'A','ą':'a','Ć':'C','ć':'c','Ĉ':'C','ĉ':'c','Ċ':'C','ċ':'c','Č':'C','č':'c','Ď':'D','ď':'d','Đ':'D','đ':'d','Ē':'E','ē':'e','Ĕ':'E','ĕ':'e','Ė':'E','ė':'e','Ę':'E','ę':'e','Ě':'E','ě':'e','Ĝ':'G','ĝ':'g','Ğ':'G','ğ':'g','Ġ':'G','ġ':'g','Ģ':'G','ģ':'g','Ĥ':'H','ĥ':'h','Ħ':'H','ħ':'h','Ĩ':'I','ĩ':'i','Ī':'I','ī':'i','Ĭ':'I','ĭ':'i','Į':'I','į':'i','İ':'I','ı':'i','IJ':'IJ','ij':'ij','Ĵ':'J','ĵ':'j','Ķ':'K','ķ':'k','Ĺ':'L','ĺ':'l','Ļ':'L','ļ':'l','Ľ':'L','ľ':'l','Ŀ':'L','ŀ':'l','Ł':'L','ł':'l','Ń':'N','ń':'n','Ņ':'N','ņ':'n','Ň':'N','ň':'n','ʼn':'n','Ō':'O','ō':'o','Ŏ':'O','ŏ':'o','Ő':'O','ő':'o','Œ':'OE','œ':'oe','Ŕ':'R','ŕ':'r','Ŗ':'R','ŗ':'r','Ř':'R','ř':'r','Ś':'S','ś':'s','Ŝ':'S','ŝ':'s','Ş':'S','ş':'s','Š':'S','š':'s','Ţ':'T','ţ':'t','Ť':'T','ť':'t','Ŧ':'T','ŧ':'t','Ũ':'U','ũ':'u','Ū':'U','ū':'u','Ŭ':'U','ŭ':'u','Ů':'U','ů':'u','Ű':'U','ű':'u','Ų':'U','ų':'u','Ŵ':'W','ŵ':'w','Ŷ':'Y','ŷ':'y','Ÿ':'Y','Ź':'Z','ź':'z','Ż':'Z','ż':'z','Ž':'Z','ž':'z','ſ':'s','ƒ':'f','Ơ':'O','ơ':'o','Ư':'U','ư':'u','Ǎ':'A','ǎ':'a','Ǐ':'I','ǐ':'i','Ǒ':'O','ǒ':'o','Ǔ':'U','ǔ':'u','Ǖ':'U','ǖ':'u','Ǘ':'U','ǘ':'u','Ǚ':'U','ǚ':'u','Ǜ':'U','ǜ':'u','Ǻ':'A','ǻ':'a','Ǽ':'AE','ǽ':'ae','Ǿ':'O','ǿ':'o'};var res='';for (var i=0;i<str.length;i++){c=str.charAt(i);res+=map[c]||c;}return res;}
AFTER (WORKS OK)
var charToAccentedCharClassMap = {
// A to H
'I': '[Iiı\xcc-\xcf\xec-\xef\u0128-\u0130\u0132\u0133\u01cf\u01d0\u0208-\u020b\u1d35\u1d62\u1e2c\u1e2d\u1ec8-\u1ecb\u2071\u2110\u2111\u2139\u2148\u2160-\u2163\u2165-\u2168\u216a\u216b\u2170-\u2173\u2175-\u2178\u217a\u217b\u24a4\u24be\u24d8\u337a\u33cc\u33d5\ufb01\ufb03\uff29\uff49]'
// J to Z
};
function deaccent(accentedString) { var result = accentedString; for (var key in charToAccentedCharClassMap) { result = result.replace(new RegExp(charToAccentedCharClassMap[key], "g"), key); } //console.log(accentedString) return result.toLowerCase(); }
function remove_accent(str) { return deaccent(str).toLowerCase(); return str; }
EDIT2 약간의 보정 (SO 사용자 편집 질문하지만 미스 İ 그의 키보드) :
그는 ("이스탄불"을 대체) .indexOf ("is") by ("istanbul"). indexOf ("is")
전체 코드 샘플을 게시 할 수 있습니까? 나는 단지 "istanbul".indexOf ("is")'를 복사하여 내 Chrome 콘솔에 붙여 넣기 만하면 올바르게 작동합니다. –
jsfiddle.net을 사용하여 우리와 공유 할 수있는 최소화 된 예제를 만들어보십시오. –
'i'등을 'i'로 만들기 위해 글자의 악센트를 제거 할 수 없습니까? 그러면 'is'가 있는지 확인할 수 있습니다. – pimvdb