Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
PHP. Определение длинны строки
Новая тема
Ответить
цитата
09/04/11 в 19:07
FXIX
Код:
Цитата:
$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 символов или нет. Просто символы посчитать.
цитата
09/04/11 в 19:12
taj
mb_strlen($b,'utf8');
цитата
09/04/11 в 19:12
Alexandur
Код:
echo mb_strlen($a2, 'UTF-8');
цитата
09/04/11 в 19:19
FXIX
нене. кодировка неизвеста. просто на входе текст неизвестного языка и кодировки. проверить граничное условие - текст вообще имеет внутри себя что-то осмысленное (3 предложения к примеру) или нет.
цитата
09/04/11 в 19:27
Alexandur
Если язык неизвестен, ты длину не определишь.
С определённой вероятностью:
http://php.net/manual/en/function.mb-detect-encoding.php
цитата
09/04/11 в 20:04
FXIX
да уж. придется паллиатив
if(preg_match("~.{400}~is", $text)==0) {$short=TRUE;} # 200 символов русского текста в UTF-8, 400 символов анг
цитата
09/04/11 в 20:36
freeek
а если так?
Код:
if(isset($a1{6})){
//Больше 6 символов
}
цитата
09/04/11 в 21:29
FXIX
неа. не работает.
var_dump( isset ($a1{6}) );
var_dump( isset ($a2{6}) );
вывод:
bool(false)
bool(true)
а вот интересно, говорят в питоне с этим проблем нет. а в пхп проблема якобы в СИ. питон почему не страдает этим?
цитата
12/04/11 в 22:02
taj
потому что в питоне все по другому)
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)
Начиная с Python версии 3.0, строковый тип поддерживает только Unicode, да и в 2.х я таких проблем не встречал, т.к. всегда и везде использую только юникод - это спасает от массы проблем.
цитата
12/04/11 в 22:53
FXIX
taj писал:
Проблема ПХП в том что strlen возвращает количество байтов, а не символов. И, соответственно, с многобайтовой кодировкой трабл - возвращает в 2 раза больше)
ну mb_strlen($b,'utf8') это решение конечно. пока нормальное более менее. может пхп6 перестанет страдать этим
цитата
13/04/11 в 15:59
samedi
Код:
strlen(utf8_decode($a))
Но mb_strlen() должна быть быстрее.
Новая тема
Ответить
Эта страница в полной версии