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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Помогите пожалуйста разобраться с mb_split
 
 автор: Atreides   (05.01.2009 в 12:56)   письмо автору
 
 

Здравствуйте!
Хочу использовать для разделения utf-8 строки на массив символов функцию mb_split, так как если применять str_split, то с латиницей и цифрами всё нормально, а вот из кириллицы получаются крокозябры (полагаю потому, что русские символы занимают больше одного байта, а порезка строки происходит побайтово, а не побуквенно).
Синтаксис функции из официальной документации следующий:

array mb_split ( string $pattern , string $string [, int $limit ] )
Split a multibyte string using regular expression pattern and returns the result as an array.

Проблема в том, что с регулярными выражениями я раньше не заморачивался и старался всячески их избегать, а теперь не могу составить этот самый $pattern чтобы строка порезалась именно по одному символу. Что ни попробую написать, всегда выплёвывает всю строку в первый же элемент массива. В общем, подскажите, пожалуйста, какую конструкцию надо использовать, при чём чтобы не выпадали ни пробелы, ни спецсимволы. То есть по умолчанию считаем, что передана в функцию может быть строка с любыми символами и все они должны без потерь попасть в массив. И если не сложно, то принцип построения этой конструкции - что зачем и почему.

Заодно буду благодарен, если подскажете что-нибудь написанное человеческим понятным языком на темы:
1) кодировок, их согласования, объявления и т.п. Хочу писать сайт сразу на unicode, чтобы при необходимости сделать иноязычный аналог траблов не возникало (уж лучше один раз в начале повозиться)
2) обработки мультибайтовых строк (это из первого следует)
3) регулярных выражений

  Ответить  
 
 автор: ДаньЧег   (05.01.2009 в 15:23)   письмо автору
 
   для: Atreides   (05.01.2009 в 12:56)
 

Попробуй использовать preg_match.
Шас у ся попробую, если нада отпишусь...
Нет! Неполучилось...шаблон просто отказывается видеть кирилицу..
Поэксперементировать можно ЗДЕСЬ.

Эксперементировал дальше....если я тебя правильно понял, то тваю задачу можно решить обычным сплитом.Пример:
<?
$user_inf
=file('user.txt');
for(
$i=0;$i<=count(';')+50;$i++)

   list(
$user,$pass) = explode(';',$user_inf[$i]);

echo 
"$user<br>";
    echo 
"$pass";
    echo 
"<br><br>";

}
echo 
$user_log_and_pass[1];
?>


Но если у тебя строка, то ее нужно разбить!(хз чем, но если у тебя формат записи такой: чтототам1;чавототам1 чтототам2;чавототам2) в данном случае по пробелам...Код(стыренный):
<?
$user_inf=file('user.txt');

$text = "чтототам12323;чавототам1 чтототам2;чавототам2 чтототам123423;чавототам3 чтототам1554534533;чавототам1";
$abc = wordwrap($text, 40, "<br />", 10);
echo $abc ;
?>

  Ответить  
 
 автор: _deniska_   (05.01.2009 в 17:03)   письмо автору
 
   для: Atreides   (05.01.2009 в 12:56)
 

Тоже столкнулся с регулярными выражениями в Php и кирилицей, кароче говоря не принимает пхп кирилицу, что я тока не пробовал, установка локали тоже не помогает

  Ответить  
 
 автор: Drago   (05.01.2009 в 17:21)   письмо автору
 
   для: _deniska_   (05.01.2009 в 17:03)
 

А модификатор "u" для юникода пробовали?

  Ответить  
 
 автор: _deniska_   (05.01.2009 в 17:26)   письмо автору
 
   для: Drago   (05.01.2009 в 17:21)
 

попробую

  Ответить  
 
 автор: ДаньЧег   (05.01.2009 в 17:37)   письмо автору
 
   для: _deniska_   (05.01.2009 в 17:03)
 

Так я чето не совем понел проблему...
Вы не можете разделить строку из кириличных знаков?!

  Ответить  
 
 автор: Atreides   (05.01.2009 в 18:18)   письмо автору
 
   для: ДаньЧег   (05.01.2009 в 17:37)
 

Да, именно так. HTML файл идёт с заданной кодировкой unicode (utf-8), соответственно все строки, передаваемые в php-функции тоже идут в ней. Проблема в том, что если использовать конструкцию вида
$arr = str_split ($str, 1);

то цифры и латиница обрабатываются нормально, так как там по 1 байту на символ, а кириллица валится нафиг, так как там 2 байта на символ и эта функция распиливает каждую букву на две части.
Есть функция, которая должна делить нормально (см. первое сообщение), но у меня она почему-то не пашет, как я её ни вертел.

  Ответить  
 
 автор: Николай2357   (05.01.2009 в 18:31)   письмо автору
 
   для: Atreides   (05.01.2009 в 18:18)
 

Ну вот, как вариант (не самый лучший наверное)
<?
preg_match_all
("#.{1}#u",$str,$arr );

  Ответить  
 
 автор: Trianon   (05.01.2009 в 19:23)   письмо автору
 
   для: Atreides   (05.01.2009 в 18:18)
 

А какие шаблоны Вы пробовали применить?

  Ответить  
 
 автор: ДаньЧег   (05.01.2009 в 21:06)   письмо автору
 
   для: Atreides   (05.01.2009 в 18:18)
 

Чето я не понел! Почему мой вариант не подходит?!

  Ответить  
 
 автор: Trianon   (05.01.2009 в 21:33)   письмо автору
 
   для: ДаньЧег   (05.01.2009 в 21:06)
 

потому что Вы пытаетесь решать другую задачу. Похоже - свою собственную.

  Ответить  
 
 автор: ДаньЧег   (06.01.2009 в 10:18)   письмо автору
 
   для: Trianon   (05.01.2009 в 21:33)
 

Чувствую себя блондинкой.....=/

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования