Добрых Дел Мастер
С нами с 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
|
Добавлено: 09/04/11 в 19:12 |
mb_strlen($b,'utf8');
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 09/04/11 в 19:12 |
Код: | echo mb_strlen($a2, 'UTF-8'); |
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 09/04/11 в 19:19 |
нене. кодировка неизвеста. просто на входе текст неизвестного языка и кодировки. проверить граничное условие - текст вообще имеет внутри себя что-то осмысленное (3 предложения к примеру) или нет.
|
|
пришел к победе коммунистического труда
|
0
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 09/04/11 в 19:27 |
|
|
|
|
Добрых Дел Мастер
С нами с 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 символов
} |
|
|
|
|
Добрых Дел Мастер
С нами с 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
|
Добавлено: 12/04/11 в 22:02 |
потому что в питоне все по другому)
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)
Начиная с Python версии 3.0, строковый тип поддерживает только Unicode, да и в 2.х я таких проблем не встречал, т.к. всегда и везде использую только юникод - это спасает от массы проблем.
|
|
|
|
Добрых Дел Мастер
С нами с 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() должна быть быстрее.
|
|
|
|