Разбить текст на слова

Статус
В этой теме нельзя размещать новые ответы.

HatoL

Профессор
Регистрация
5 Фев 2008
Сообщения
206
Реакции
36
Имеется следующий кусок кода, который разбивает некую строку на слова:
PHP:
$string = 'Сайт по продаже автомобилей';

if (1 === preg_match('##u', $string))
{
	$words = preg_split('#[0-9\W_]+#Disu', $string, -1, PREG_SPLIT_NO_EMPTY);
}
else
{
	$words = preg_split('#[0-9\W_]+#Dis', $string, -1, PREG_SPLIT_NO_EMPTY);
}
На «Денвер-3» все работает. Поставил на хостинг с FreeBSD - берутся только английские слова (или не только, но русские точно не видит). Если сайт в UTF-8, то все нормально (в коде выше есть проверка).

P.S. просьба давать только помощь, которая не требует «хирургического вмешательства». Модуль требуется написать в таком виде, в каком он будет работать без установки дополнительных расширений PHP и его перекомпиляции.
 
попробуй данную функцию

там еще много примеров на эту тему
 
А почему не попробуешь с разделителем?
Типа:
Код:
<?php

$words = explode(' ', $string);

?>

или с регуляркой без учета количества пробелов между символами:

Код:
<?php

$words = preg_split('\s', $string);

?>
 
А почему не попробуешь с разделителем?
Типа:
Код:
<?php

$words = explode(' ', $string);

?>

или с регуляркой без учета количества пробелов между символами:

Код:
<?php

$words = preg_split('\s', $string);

?>
потому что разделителем может быть и запятая, и тире, и апостроф, и… Поэтому появляется выбор - либо перечислять все спец. символы и захватывать все, кроме них, либо захватывать только определенные символы. На самом деле второй вариант сложнее, но лучше. Страница может быть и в Юникоде, и в ANSI, да и у разных языков разные символы считаются буквами.

P.S. сделал с помощью локали.
 
да вроде все нормально работает
 
Попробуйте должно подойти ..
PHP:
$x=' 
На «Денвер-3» все работает. 
Поставил на хостинг с FreeBSD - 
берутся только английские слова (
или не только, но русские точно не видит
). ~~~__ Если сайт в UTF-8, то все нормально 
(в коде выше есть проверка).anyone posting anthing 
with X-MOBILE signature , %^& on the release, will be';
preg_match_all('/([А-Яа-яЁёA-Za-z]+)/u', $x, $ok);

for ($i=0; $i<count($ok[1]); $i++)
echo $ok[1][$i].'<br />';
 
PHP:
if (mb_check_encoding($string, "UTF-8"))
{
    $words = preg_split('#[0-9\W_]+#u', $string, -1, PREG_SPLIT_NO_EMPTY); 
}
else
{
   $words = preg_split('#[0-9\W_]+#', $string, -1, PREG_SPLIT_NO_EMPTY)
}
 
если использовать разбивку текста по словам, лучше использовать модификатор "\b" - граница слова:

PHP:
$string = "Потому-что,этот модификатор,позволяет, разбивать на слова даже если они идут без пробела после занка припинания!Вот такие дела?Ясно?!";
preg_match_all("#\b(\w+)\b#",$string,$out);
echo "<pre>";
print_r($out);
echo "</pre>";
 
еще вариант сначала нормализовать предложение так:
меняем "," на ", "
меняем "." на ". "
меняем "`" на "` "
и т.д.
и после этого имеем гарантирвоанно разделенную пробелами последовательность
рубите ее хоть list()=split хоть preg_match_all ...
тока не забывайте trim()
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху