在PHP中没有任何可辨别的断点,分解一行文本

时间:2011-07-12 10:07:04

标签: php text programming-languages

我有一个PHP函数来捕获长URL并修剪它们,这样它们就不会破坏我网站的格式。我有wordwrap捕捉句子,但我无法阻止这样的文字:

'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'

我如何停止这样的用户输入?

如果有破折号,我尝试过的东西会工作(我在某些功能中也试过了­)但没有一个影响上面的内容。这是一个论坛,这是用户输入的最后一点我不能停止破坏我的网站!感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

您可以使用CSS来设置页面的样式,使其在不适合可用空间时打破长词,而不是试图破坏PHP中的单词。

CSS样式为word-wrap:break-word;

将此应用于包含长文本的元素,并在必要时包装长字。

希望有所帮助。

答案 1 :(得分:2)

如果您将TRUE作为第四个参数包含,则

wordwrap()会分解长字:

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

这将在30个字符或之前插入一个中断。 TRUE需要强制中断长话。如果使用FALSE(默认值),则仅在空格处断行。

答案 2 :(得分:1)

<?php
$string = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

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

输出:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

答案 3 :(得分:1)

基本上你想要做的是实现马尔可夫链或布隆过滤器来试图识别“乱码”。

忘记我现在的位置,但我已经使用了这个小功能:

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;
}

这将允许您将输入标记为可能的垃圾,替代方法包括包装文本等。