Реклама на сайте Advertise with us

PHP. Определение длинны строки

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 09/04/11 в 19:07       Ответить с цитатойцитата 

Код:

Цитата:

$a1='qwerty';
$a2='абвгде';

echo strlen($a1);
echo "\n";
echo strlen($a2);
echo "\n";


echo mb_strlen($a1);
echo "\n";
echo mb_strlen($a2);
echo "\n";


echo iconv_strlen($a1);
echo "\n";
echo iconv_strlen($a2);
echo "\n";


echo preg_match("~.{7}~is", $a1); # при 6 - вернет 1
echo "\n";
echo preg_match("~.{13}~is", $a2); # при 12 - вернет 1
echo "\n";


Вывод:
Цитата:

6
12
6
12
6
12
0
0


Просто узнать, текст больше 6 символов или нет. Просто символы посчитать.

пришел к победе коммунистического труда

0
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 09/04/11 в 19:12       Ответить с цитатойцитата 

mb_strlen($b,'utf8');

True хостинг

5
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 09/04/11 в 19:12       Ответить с цитатойцитата 

Код:
echo mb_strlen($a2, 'UTF-8');

5
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 09/04/11 в 19:19       Ответить с цитатойцитата 

нене. кодировка неизвеста. просто на входе текст неизвестного языка и кодировки. проверить граничное условие - текст вообще имеет внутри себя что-то осмысленное (3 предложения к примеру) или нет.

пришел к победе коммунистического труда

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 09/04/11 в 19:27       Ответить с цитатойцитата 

Если язык неизвестен, ты длину не определишь.

С определённой вероятностью:
http://php.net/manual/en/function.mb-detect-encoding.php

5
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 09/04/11 в 20:04       Ответить с цитатойцитата 

да уж. придется паллиатив
if(preg_match("~.{400}~is", $text)==0) {$short=TRUE;} # 200 символов русского текста в UTF-8, 400 символов анг

пришел к победе коммунистического труда

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 09/04/11 в 20:36       Ответить с цитатойцитата 

а если так?

Код:
  if(isset($a1{6})){
    //Больше 6 символов
  }

5
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 09/04/11 в 21:29       Ответить с цитатойцитата 

неа. не работает.

var_dump( isset ($a1{6}) );
var_dump( isset ($a2{6}) );

вывод:
bool(false)
bool(true)

а вот интересно, говорят в питоне с этим проблем нет. а в пхп проблема якобы в СИ. питон почему не страдает этим?

пришел к победе коммунистического труда

0
 



С нами с 05.04.07
Сообщения: 1661
Рейтинг: 1090


Передовик Master-X (01.04.2011)
Ссылка на сообщениеДобавлено: 12/04/11 в 22:02       Ответить с цитатойцитата 

потому что в питоне все по другому)
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)

Начиная с Python версии 3.0, строковый тип поддерживает только Unicode, да и в 2.х я таких проблем не встречал, т.к. всегда и везде использую только юникод - это спасает от массы проблем.

True хостинг

5
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 12/04/11 в 22:53       Ответить с цитатойцитата 

taj писал:
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)

ну mb_strlen($b,'utf8') это решение конечно. пока нормальное более менее. может пхп6 перестанет страдать этим

пришел к победе коммунистического труда

0
 



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 13/04/11 в 15:59       Ответить с цитатойцитата 

Код:
strlen(utf8_decode($a))

Но mb_strlen() должна быть быстрее.

ВОСТОРГ ЗНАЧИТ BMW

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »