Dizisi ile str_replace kullanabilirsiniz ya da yerine üç kez yinelenen regex ve php kısaltmak nasıl?

4 Cevap php

Ben å tüm ø æ .... vb sadece _ yerine şu var.

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

Şimdi aşağıdakilere göre onları değiştirmek istiyorum.

Değiştirin,

space _

A, A, à ¥ ve à ... a kadar,

o kadar ø, Ø, A ve A ~ ¸,

Æ Æ Ã | Ã † ve e.

Bunu yapmak için bir dizi ile str_replace kullanabilir miyim? Eğer evet ise, nasıl?

Yoksa aynı Regex üç kez tekrarlamak zorunda mı?

Herkes bana kod yazmak için daha iyi bir yol söyleyebilir misiniz?

- EDIT -

Pleas ignore the encoding at the moment. I am NOT asking advices about encoding now.

Ben burada kodlama sorunu sordu. http://stackoverflow.com/questions/1989806/norwegian-characters-problem

4 Cevap

Bamya Dediğim gibi kodlama ile bazı sorunlarım var, ama sizin için genel bir fikir bu düzeltmeyi terk olurdu

$data=preg_replace('/[ 帿ŨÆ]/iu','_',mb_strtolower($string,'utf-8'));

Eğer unicode ile çalışmak istediğiniz durumda strtolower ve mb_ varyant, unutmayın.

Edit: Ve stakx önerisi de mantıklı, ama mantığını değiştirir.

Eşleştirmeler kullanan alternatif bir çözüm kullanmak için str_replace. Ben bir örnek için eşlemeleri bir kümesini kullanılır. Her bir değeri $search $replace karşılık gelen dizin eşleştirir.

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

Neden soruna çevirmek ve bunun yerine karakterleri (örneğin, tüm harfler a z için, basamak 0 için {[(aynı kalmak için gidiyoruz devlet değil 3 )]}, vb)?

Daha sonra [^a-z0-9] benzer bir regex ile tüm diğer karakterler maç olabilir.

Edit: Bu aslında easier değiştirilmesi gereken tüm karakterleri listeleme daha aynı kalacak tüm karakterleri eğer Tabii ki, bu öneri sadece mantıklı.