Разбейте одну строку текста без каких-либо заметных точек разрыва в PHP - PullRequest
2 голосов
/ 12 июля 2011

У меня есть функция PHP, позволяющая ловить длинные URL-адреса и обрезать их, чтобы они не нарушали форматирование моего сайта.У меня есть WordWrap ловить предложения, но я не могу остановить подобный текст:

1002 * «aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa» 1004 * Как бы я остановить ввод данных пользователем, как, что 1006 * Вещи, которые я имеюпробовал работать, если есть тире (и я пробовал ­ в некоторых функциях), но ни одна из них не влияет на вышеописанное.Это для форума, и это последний бит ввода пользователя, я не могу перестать ломать свой сайт!Заранее спасибо за помощь.

Ответы [ 4 ]

3 голосов
/ 12 июля 2011

Вместо того, чтобы пытаться разбить слово в PHP, вы можете использовать CSS для стилизации страницы таким образом, чтобы она разбивала длинные слова, когда они не помещаются в доступное пространство.

Для этого используется стиль CSS:word-wrap:break-word;.

Примените это к элементу, который содержит длинный текст, и при необходимости он обернет длинные слова.

Надеюсь, это поможет.

2 голосов
/ 12 июля 2011

wordwrap() будет разбивать длинные слова, если вы включите TRUE в качестве четвертого параметра:

wordwrap( $very_long_string, 30, '<br />', TRUE );

Это вставит разрыв в или до 30 символов.TRUE требуется, чтобы сделать разрыв в длинных словах.Если используется FALSE (по умолчанию), строки разбиваются только на пробелы.

1 голос
/ 12 июля 2011

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

Забудьте, откуда я это получил, но я использовал эту маленькую функцию:

echo contains_gibberish ("heiahihaiaheiah");

function contains_gibberish( $input )
{
    $result = array();

    for($i = 0; $i < strlen( $input ); $i++)
    {
        if ( isset( $result[ $input[ $i ] ] ) )
        {
            $result[ $input[ $i ] ]++;
        } else {
            $result[ $input[ $i ] ] = 1;
        }
    }
    return ( max( $result ) / strlen( $input ) * 100 >= 33 ) ? true : false;
}

Это позволит вам пометить ввод как потенциально мусор, альтернативы включают перенос текста и т. Д.

1 голос
/ 12 июля 2011
<?php
$string = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

echo chunk_split($string, $char_length = 50, $line_ending = "<br />");
?>

Выход:

аааааааааааааааааааааааааааааааааааааааааааааааааа
аааааааааааааааааааааааааааааааааааааааааааааааааа

...