Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: замена строчных на прописные

Сообщения:  [1-7] 

 
 автор: Anatoly_ua   (10.09.2008 в 21:51)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 21:36)
 

все оказалось проще, нужно было использовать preg_replace_callback():

<?php
/* ... */
function capitalize ($matches) {
    return $matches[1] . toupper($matches[2]);
}

setlocale(LC_ALL,'ru_RU.utf8');
print setlocale(LC_ALL, 0);

$result1 = preg_replace_callback('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu', "capitalize", $text);
/* ... */
?>

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 21:36)   письмо автору
 
   для: xx77   (10.09.2008 в 18:37)
 

Я тут поэкспериментировал...


<?php
header('Content-type:text/html; charset=utf-8');

$text = 'word. capital';


setlocale(LC_ALL,'ru_RU.utf8');
print setlocale(LC_ALL, 0);

$result1 = preg_replace('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu', '$1' . strtoupper('$2'), $text);
$result2 = strtoupper($text);
$result3 = mb_strtoupper($text, "UTF-8");
$result4 = toupper($text);

echo "
<pre>
1: $result1

2: $result2

3: $result3

4: $result4

</pre>
";





function toupper($content) {
$content = str_replace(
array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "р", "п", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ь", "ы", "э", "ю", "я"),
array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "Р", "П", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ь", "Ы", "Э", "Ю", "Я"),
$content);
return strtoupper($content);
}


?>


Похоже, в preg_replace вообще функции нельзя применять, потому что не работает даже с англ. Или где ошибка есть?

Результат такой:
с англ.:

ru_RU.utf8
1: word. capital
2: WORD. CAPITAL
3: WORD. CAPITAL
4: WORD. CAPITAL


с русским:

ru_RU.utf8
1: слово. заглавная
2: слово. заглавная
3: СЛОВО. ЗАГЛАВНАЯ
4: СЛОВО. ЗАГЛАВНАЯ

  Ответить  
 
 автор: xx77   (10.09.2008 в 18:37)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 15:01)
 

<?php
header('Content-type:text/html; charset=utf-8'); 

/*
говорят что не под Windows можно так
*/
print setlocale(LC_ALL, 0) . '<hr/>'; // вывод текущего значения локали
echo '<pre>' . strtoupper('значение') . '<hr>'; 
setlocale (LC_CTYPE, 'ru_RU.UTF-8'); 
# установка  LC_CTYPE
print setlocale(LC_ALL, 0) . '<hr/>';  # вывод
echo strtoupper('значение') . '<hr>'; 
/*
а так , если подключена  mbstring
*/
echo mb_strtoupper( 'значение', 'UTF-8' );
?>

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 15:01)   письмо автору
 
   для: xx77   (10.09.2008 в 01:18)
 

У меня вот по такому шаблону все отлично находится (сайт и скрипты в utf8):


$txt = preg_replace('#([!?.](?:\s*(?:<.*?>)*\s*))([a-zа-яё])#smu', '$1' . toupper('$2'), $test)


Но ничего не могу придумать, как русские буквы перевести в верхний регистр. Уже вставил функцию



function toupper($content) {
$content = str_replace(
array("а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "р", "п", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ъ", "ь", "ы", "э", "ю", "я"),
array("А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "Р", "П", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ь", "Ы", "Э", "Ю", "Я"),
$content);
return strtoupper($content);
}


не помогло...
Можно как-то с русским текстом решить проблему?

  Ответить  
 
 автор: xx77   (10.09.2008 в 01:18)   письмо автору
 
   для: xx77   (10.09.2008 в 01:07)
 

> с последующим пробелом и/или тэгом (например, </p>)

не сразу обратил внимание

<? 
$txt = preg_replace('#([!\.\?](?:\s+|</p>)+)([a-zа-яё])#e', '\'$1\' . strtolower(\'$2\')', $txt);

  Ответить  
 
 автор: xx77   (10.09.2008 в 01:07)   письмо автору
 
   для: Anatoly_ua   (10.09.2008 в 00:19)
 

можно попробовать так, если работает(не пробовал)
<?
$txt = preg_replace('#([!\.>\?]\s+)([a-zа-яё])#e', '\'$1\' . strtolower(\'$2\')', $txt);

но думаю скорее всего будет переводить не только то что нужно

  Ответить  
 
 автор: Anatoly_ua   (10.09.2008 в 00:19)   письмо автору
 
 

Можно сделать так, чтобы все буквы с которых начинается предложение становились заглавными?
Предложение -- то, что заканчивается на . ! или ? с последующим пробелом и/или тэгом (например, </p>)

  Ответить  

Сообщения:  [1-7] 

Форум разработан IT-студией SoftTime