많은 유럽 언어의 특수 액센트 문자를 포함하는 의학 용어를 정렬하는 문자열 비교 함수를 작성하고 있습니다. MySQL의 latin1_general_ci
과 비슷한 데이터 정렬을 수행해야합니다.PHP에서 MySQL의 latin1_general_ci 데이터 정렬과 같은 것을 어떻게 달성합니까?
먼저 공백, 인용 부호, 하이픈, 괄호 등을 제거하기 위해 문자열에 기본 munging을 수행합니다. 문자가 충분히 똑똑하지 않기 때문에 기본 로케일을 사용하여 strcoll()
에 문자열을 전달하면 문제가 발생합니다 예를 들어 악센트 e를 사 전적으로 정규 e와 동등하게 고려할 수 있습니다.
나는 고려해야 할 특수 문자가 모두 포함되어 있지 않기 때문에 독일어 또는 프랑스어 같은 로케일을 사용하는 것을 조심스럽게 생각합니다. latin1_general_ci
데이터 정렬과 비슷한 항목을 제공 할 로캘이 있습니까? 아니면 다른 해결책이 있습니까?
내 순진한 해결책은 악센트 부호가있는 문자를 일반 문자로 매핑 한 다음이 문자를 str_replace()
과 함께 사용하여 큰 연관 배열을 만드는 것입니다. 그러나 느리고 지루한 (오류 발생 가능성이 높음) 것으로 들립니다. 가능한 경우 언어에 내장 된 것을 사용하고 싶습니다.
strcmp()
또는 strcasecmp()
도 현재 로캘의 데이터 정렬을 따르지 않습니까, 아니면 그냥 strcoll()
입니까?
프랑스어입니까? 그 조합에서 설명되지 않는 독일어에 등장 인물이 없을까요? 아니면 FR이 특별한 것을하고 있습니까? "Indo-European"로켈을 찾았는데 현재 내가 원하는 특수 문자에 대한 원하는 결과와 계정을 생성하는지 테스트하고 있습니다. –
이것은 프랑스어이지만, .Latin1/.Latin-1 수정자를 사용하여 해당 문자 세트를 강제 변환하려고합니다. 그것이 실제로 받아 들여지는 데 필요한 것은 신비한 부분입니다. – chaos
방금 시도했는데 이상하게도 효과가있었습니다. 기본 'C'이외의 로케일을 설정하면 strcoll()은 강조된 모든 문자를 특정 언어로 분류하지 않고 정렬 할 수 있습니다. 예를 들어, fr_FR을 설정하면 strcoll()이 독일어 ß 문자를 인식합니다. 이상한! 당신의 도움을 주셔서 감사합니다. –