2010-12-16 4 views
2

Когда я использую следующий скрипт, я получаю двойные символы. Зачем?При использовании preg_replace я получаю двойные символы ...?

$clean_lastname = "Dür"; 
$clean_lastname = preg_replace("/[ùúûü]/", "u", $clean_lastname); 
echo $clean_lastname; 

Выход: Duur

Я хочу, чтобы это было Dur.

Я все еще делаю что-то не так ... Что случилось с «добавлением одного значения массива в функцию preg?

$clean_lastname = "Boerée"; 
$l = 0; 
$pattern = array('[ÀÁÂÃÄÅ]','[Ç]','[ÈÉÊË]','[ÌÍÎÏ]','[Ñ]','[ÒÓÔÕÖØ]','[Ý]','[ß]','[àáâãäå]','[ç]','[èéêë]','[ìíîï]','[ñ]','[òóôõöø]','[ùúûü]','[ýÿ]'); 
$replace = array(A,C,E,I,N,O,Y,S,a,c,e,i,n,o,u,y); 

foreach ($pattern as $wierdchar) 
{ 
    $clean_lastname = preg_replace('/$wierdchar/u', '$replace[$l]', $clean_lastname); 
    $l++; 
} 

//$clean_lastname = preg_replace('/[èéêë]/u', 'e', $clean_lastname); 

//$clean_lastname = strtr($clean_lastname, "ùúûü","uuuu"); 
echo $clean_lastname; 

ответ

1
<?php 
    $vowels = array("ù","ú","û","ü"); 
    $consonents = array("u","u","u","u"); 
    $clean_lastname = "Dür"; 
    echo str_replace($vowels, $consonents, $clean_lastname); 
?> 
+0

вы должны прочитать предыдущие вопросы этого OP ... – ajreal 2010-12-16 16:49:52

+0

Он работает для этой конкретной строки, но имеет больше, у меня также есть ù, ú, û, ü и т. Д. – Thijs 2010-12-16 16:55:06

+0

Я отредактировал ответ pls check – 2010-12-16 17:03:47

1
$clean_lastname = str_replace(array('ù', 'ú', 'û', 'ü', 'Ù', 'Ú', 'Û', 'Ü'), array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'), $clean_lastname); 

// ИЛИ решить ваш первоначальный вопрос:

$clean_lastname = preg_replace('/[ùúûü]/u', 'u', $clean_lastname); 
1

палку с вашим оригинальным strtr

$clean_lastname = "Dür Dùr Dúr Dûr"; 
$clean_lastname = strtr($clean_lastname, "ùúûü", "uuuu"); 
echo $clean_lastname; 
2

Единственная ситуация, я могу изображение, чтобы это случилось когда ваши две строки (входная строка и шаблон) имеют различную кодировку символов или оба являются UTF-8, но вы не указали их правильно.

Потому что в последнем случае, "Dür" эквивалентно "D\xC3\xBCr" (ü кодируется с последовательностью два байта 0xC3BC) и шаблон "/[ùúûü]/" эквивалентно "/[\xC3\xB9\xC3\xBA\xC3\xBB\xC3\xBC]/". Так как каждый байт, заданный для управляющей последовательности \xHH трактуется как один символ, это приводит к следующему результату:

echo preg_replace("/[\xC3\xB9\xC3\xBA\xC3\xBB\xC3\xBC]/", "u", "D\xC3\xBCr"); // Duur 

Так при работе с UTF-8 убедитесь, чтобы установить u modifier flag таким образом, что структура и входной строки рассматриваются как UTF-8 кодируются:

"/[ùúûü]/u" 

Редактировать Теперь, когда вы прояснить свои намерения, и вы, кажется, пытаются реализовать какой-то из transliteration, Вы должны смотреть на iconv и его способность транслитерации:

iconv("UTF-8", "US-ASCII//TRANSLIT", $str) 

Смотрите также другие темы, такие как:

Смежные вопросы