2011-02-16 1 views
1

Я хочу использовать каждое слово, даже если оно находится в любом виде скобок() <> [] {}. Он также должен использовать символы unicode.PHP капитализировать строку unicode в скобках

Например:

ti si želva (čestitke) 

должен производить

Ti Si Želva (Čestitke) 

Я использовал эту функцию очень долго

function ucwords2($str) 
{ 
    $str = strtolower($str); 
    $str = preg_replace('/(?<![a-z]\')\b[a-z]/e', 'strtoupper(\'$0\')', $str); 
    return $str; 
} 

но теперь мне нужна поддержка юникода поэтому он стал непригодным для использования.

Спасибо!

ответ

2

Вот что работает для меня:

$txt='ti si želva (čestitke)'; 
echo mb_convert_case($txt,MB_CASE_TITLE,'utf-8'); 

Понял?

+0

Хороший ответ. Как правило, переход на Unicode подразумевает сохранение файлов как UTF-8, используя эквиваленты mb_ * строковых функций и добавление флага 'u' к регулярным выражениям. –

+0

это именно то, что мне нужно. Но это одна проблема. Он также использует буквы за «или». Итак, «это» становится «It's» – Paxxil

+0

Есть ли какое-либо решение с mb_ereg_replace? – Paxxil

0

Я думаю, что функция isLower() является unicode-aware, поэтому я думаю, что это лучший способ проверить символы. Не знаю, как вы можете сделать это в своем регулярном выражении.

0

Попробуйте это:

function to_up($txt){ 
    $up=mb_convert_case($txt,MB_CASE_TITLE,'utf-8'); 
    return strtr($up, 
     array(
      "'S"=>"'s", 
      "'D"=>"'d", 
      "'L"=>"'l" 
     ) 
    ); 
} 

$txt="john, it's all your fault!"; 
echo to_up($txt); 

Обратите внимание, что вы можете добавить все, что вы хотите в массиве ...

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