|
|
|
| Вот как сделать из прыгющего регистра только чисто нижний или верхний все знаем.
Но вот никак не могу придумать как бы из обычного регистра сделать беспорядок.
Очень надо, прошу помощи.
Например пользователь пишет "Привет", а в базу заносится "ПрИвЕт" | |
|
|
|
|
|
|
|
для: gRoot
(06.03.2010 в 19:22)
| | Прошу..Правда ето только для английських слов...
<?php
$str = "Hello world";
for($i=0;$i<strlen($str);$i++)
{
if($i%2 == 0)
{
$str[$i] = strtoupper($str[$i]);
}
}
echo $str;
?>
|
| |
|
|
|
|
|
|
|
для: Марко
(06.03.2010 в 19:39)
| | >.Правда ето только для английських слов...
Почему? | |
|
|
|
|
|
|
|
для: ddhvvn
(06.03.2010 в 20:22)
| | Если надо и для руских то нада исползивать mb_strlen() и mb_strtoupper().Правда надо скачать модуль которий разрешает исползивать mb_ | |
|
|
|
|
|
|
|
для: Марко
(06.03.2010 в 20:37)
| | Это почему так? mb_strlen() и mb_strtoupper() для русских букв? | |
|
|
|
|
|
|
|
для: sim5
(06.03.2010 в 20:39)
| | Ну у меня так(strlen,strtoupper) не работает для руской и украинской раскладки. | |
|
|
|
|
|
|
|
для: Марко
(06.03.2010 в 20:41)
| | И что, а вышеуказанные для русских и украинских написали значит? Русский текст может быть в кодировке 1251, и с ним прекрасно справится и strlen, и strtoupper и т.п., а модуль mb_string не для русских или украинских, а для мультибайтных строк, utf-8 например. | |
|
|
|
|
|
|
|
для: sim5
(06.03.2010 в 20:46)
| | >И что, а вышеуказанные для русских и украинских написали значит? Русский текст может быть в кодировке 1251, и с ним прекрасно справится и strlen, и strtoupper и т.п., а модуль mb_string не для русских или украинских, а для мультибайтных строк, utf-8 например.
Да ти прав я не спорю,просто у меня било виставлено charset = utf8. | |
|
|
|
|
|
|
|
для: gRoot
(06.03.2010 в 19:22)
| | А орядок важен? | |
|
|
|
|
|
|
|
для: Николай2357
(06.03.2010 в 22:36)
| | >А орядок важен?
В смысле порядок? Чтобы строго одна строчная, а следующая заглавная, а потом опять строчная? Нет. НаобОРоТ НуЖЕн ПолНыЙ бЕсПОряДоК. Хотя для начала и такой строгий беспорядок сойдёт. | |
|
|
|
|
|
|
|
для: gRoot
(07.03.2010 в 07:03)
| | Хм. У меня mbstring enabled, а с utf8 не работает или вообще текст режет.
Использую вот так
function crazyreg ($text) {
for($i=0; $i<mb_strlen($text); $i++) {
if($i%2 == 0) {
$text[$i] = mb_strtoupper($text[$i]);
}
else
{
$text[$i] = mb_strtolower($text[$i]);
}
}
return $text;}
|
| |
|
|
|
|
|
|
|
для: gRoot
(07.03.2010 в 08:30)
| | mb_internal_encoding() - установите кодировку явно.
http://php.su/functions/?mb-internal-encoding | |
|
|
|
|
|
|
|
для: Akdmeh
(07.03.2010 в 10:14)
| | И это не помогло. Я даже пробывал так: перед тем как преобразования делать перегонял текст при помощи iconv в win-кодировку, а потом обратно в utf.
Но реакция от mb_internal_encoding() другая. Русский текст вообще исчезает. Это никак не связано, что мы utf кодировку разбиваем на символьные массивы? Я где-то слышал, что у мультибайтных кодировок это невозможно. | |
|
|
|
|
|
|
|
для: gRoot
(07.03.2010 в 20:10)
| | Да. Простое преобразование всего текста $text = mb_strtoupper($text); работает. Но по символьные из массива не хочет | |
|
|
|
|
|
|
|
для: gRoot
(07.03.2010 в 20:10)
| | >Я где-то слышал, что у мультибайтных кодировок это невозможно.
Это действительно так. Ну а если нужен полный бардак с регистрами, то тогда так можно:
<?php
$str = 'Привет, мир!';
$new = '';
mb_internal_encoding('utf-8');
$str = mb_strtolower($str);
for($i = 0; $i < mb_strlen($str); $i++)
if(rand(1, 2) == 1)
$new .= mb_strtoupper(mb_substr($str, $i, 1));
else
$new .= mb_substr($str, $i, 1);
echo $new;
|
| |
|
|
|
|
|
|
|
для: Николай2357
(08.03.2010 в 07:18)
| | Спасибо большое! Ваш вариант отлично работает :) | |
|
|
|
|
|
|
|
для: gRoot
(08.03.2010 в 08:15)
| | Если текст большой, есть смысл вынести подсчет строки за цикл, как советовали выше. Если маленький - особого смысла нет, так как лишнее присвоение:
<?php
$str = 'Привет, мир!';
$new = '';
mb_internal_encoding('utf-8');
$str = mb_strtolower($str);
$cnt = mb_strlen($str);
for($i = 0; $i < $cnt ; $i++)
if(rand(1, 2) == 1)
$new .= mb_strtoupper(mb_substr($str, $i, 1));
else
$new .= mb_substr($str, $i, 1);
echo $new;
|
| |
|
|
|