2010-01-02 5 views
1

나는 다음과 같이 å, ø, æ .... 등을 모두 _로 바꿉니다.배열을 사용하여 str_replace를 사용하거나 정규식과 PHP를 세 번 반복하는 대신 줄이는 방법은 무엇입니까?

$string = strtolower($string); 
$regexp = '/(|å|ø|æ|Å|Ø|Æ|Ã¥|ø|æ|Ã…|Ø|Æ)/iU'; 
$replace_char = '_'; 
$data = preg_replace($regexp, $replace_char, $string); 

이제 다음과 같이 변경하고 싶습니다. 교체

,

공간 _

A, Å하는 ¥ 및 ... (A)에,

ø, O에 Ø A와 å~,

æ을 , Æ, Ã, 및 † †

배열을 사용하여 str_replace를 사용할 수 있습니까? 그렇다면 어떻게해야합니까?

또는 동일한 정규식을 세 번 반복해야합니까?

누구나 코드를 작성하는 더 좋은 방법을 알려주시겠습니까?

--EDIT--

탄원 순간 인코딩 무시 . 나는 이 아니며 지금 인코딩에 대한 조언을 요청합니다.

여기서 인코딩 문제를 묻습니다. 검보 말했듯이 Norwegian characters problem

+1

글자 엔코딩과 약간 혼동스러운 것 같습니다. – Gumbo

+1

인코딩에 대한 조언을 묻지는 않지만 인코딩 A (예 : utf-8)를 인코딩 B (ascii)로 변환 할 때 문제가 발생하는 것 같습니다. – xtofl

답변

4

난 당신이 매핑을 통과 할 수 strtr을 사용합니다 :

$mapping = array(
    'å' => 'a', 'Å' => 'a', 'Ã¥' => 'a', 'Ã…' => 'a', 
    'ø' => 'o', 'Ø' => 'o', 'Ã' => 'o', 'Ø' => 'o', 
    'æ' => 'e', 'Æ' => 'e', 'æ' => 'e', 'Æ' => 'e' 
); 
$str = strtr($str, $mapping); 

하지만 오히려 전에 인코딩 문제를 해결해야한다. 다음 iconv과 음역을 사용할 수 있기 때문에 :

$str = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $str); 
+0

내 개발 환경은 XAMPP/Windows입니다. 그것은 Windows와 관련이 있어야합니다. 그러나 나는 그것을 고치는 법을 정말로 모른다. – shin

+0

모든 설치에서'iconv'를 사용할 수 있는지, 그리고 OP에 대한 우려가 아니라면 그 점에 대해 의견을 말씀 드리고자합니다. –

+0

shin, 어쩌면 당신은 (1) php.ini에서 인코딩을 찾고 (2) utf-8-enabled 편집기를 사용해야합니다. –

1

, 경우에 당신은 유니 코드 작업 할, 당신은 인코딩 일부 문제가 있지만, 당신이 수정을 떠나는 것은 일반적인 생각은

$data=preg_replace('/[ åøæÅØÆ]/iu','_',mb_strtolower($string,'utf-8')); 

참고하여 strtolower의 mb_ 변형 될 것이다.

편집 : 그리고 stakx의 제안도 의미가 있지만 로직을 변경합니다.

0

매핑을 사용하는 다른 솔루션은 str_replace을 사용하는 것입니다. 한 예로 최소한의 매핑 세트를 사용했습니다. $search의 각 값은 $replace의 해당 색인에 매핑됩니다.

$search = array(' ', 'å', 'ø', 'æ', 'Å', 'Ø','Æ','Ã¥'); 
$replace = array('_', 'a', 'o', 'e', 'a', 'o', 'e', 'a'); 
$string = str_replace($search, $replace, mb_strtolower($string, 'utf-8'); 
관련 문제