다른 특수 숯을 보존하는 동안 문자열에서 악센트/디아크리닉 제거
-
22-08-2019 - |
문제
매우 있습니다 비슷한 질문 이미. 솔루션 중 하나는 다음과 같은 코드를 사용합니다.
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
공백, 점, 대시 및 다른 것을 아는 사람을 제거 할 때까지 놀라운 일이 있습니다.
첫 번째 코드가 어떻게 작동하는지 잘 모르겠지만 스트라이프로 만들 수 있습니다. 뿐 신문? 아니면 최소한 보존 할 숯 목록이 주어 졌습니까? Regexps에 대한 나의 지식은 작지만, 나는 (아무 소용이 없다) 시도했다.
/[^\-x00-\x7F]/n # So it would leave the dash alone
나는 다음과 같은 일을하려고합니다.
string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
(/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s
극악한? 예...
나는 또한 시도했다 :
iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"
도와주세요?
해결책
또한 공간, 점, 대시 및 다른 것을 알고있는 사람도 제거합니다.
그것은 안됩니다.
string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s
당신은 X00 이전에 NUL 특성을 언급하기 위해 뒷선시가 있어야합니다.
/[^\-x00-\x7F]/n # So it would leave the dash alone
''와 'x'사이에 '-'를 넣으면 널 문자에 대한 참조를 깨고 범위를 깨뜨립니다.
다른 팁
나는 그것을 사용할 것이다 transliterate
방법. 보다 http://api.rubyonrails.org/classes/activesupport/inflector.html#method-i-transliterate
그것은 iconv만큼 깔끔하지는 않지만 당신이 원하는 것을합니다.
제휴하지 않습니다 StackOverflow