|
|
|
| Можно сделать так, чтобы все буквы с которых начинается предложение становились заглавными?
Предложение -- то, что заканчивается на . ! или ? с последующим пробелом и/или тэгом (например, </p>) | |
|
|
|
|
|
|
|
для: Anatoly_ua
(10.09.2008 в 00:19)
| | можно попробовать так, если работает(не пробовал)
<?
$txt = preg_replace('#([!\.>\?]\s+)([a-zа-яё])#e', '\'$1\' . strtolower(\'$2\')', $txt);
|
но думаю скорее всего будет переводить не только то что нужно | |
|
|
|
|
|
|
|
для: xx77
(10.09.2008 в 01:07)
| | > с последующим пробелом и/или тэгом (например, </p>)
не сразу обратил внимание
<?
$txt = preg_replace('#([!\.\?](?:\s+|</p>)+)([a-zа-яё])#e', '\'$1\' . strtolower(\'$2\')', $txt);
|
| |
|
|
|
|
|
|
|
для: 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);
}
|
не помогло...
Можно как-то с русским текстом решить проблему? | |
|
|
|
|
|
|
|
для: 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' );
?>
|
| |
|
|
|
|
|
|
|
для: 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: СЛОВО. ЗАГЛАВНАЯ
|
| |
|
|
|
|
|
|
|
для: 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);
/* ... */
?>
|
| |
|
|
|
|