如何使用PHP拆分长字符串?

如何使用PHP拆分长字符串?,php,Php,我目前正在研究拆分一个可能包含HTML特征的非常长的字符串 例如: Thiiiissssaaaveryyyylonnngggstringgg 为此,我在过去使用过此功能: function split($sString, $iCount = 75) { $text = $sString; $new_text = ''; $text_1 = explode('>',$text); $sizeof = sizeof($text_1); f

我目前正在研究拆分一个可能包含HTML特征的非常长的字符串

例如:

Thiiiissssaaaveryyyylonnngggstringgg
为此,我在过去使用过此功能:

function split($sString, $iCount = 75)
{       
    $text = $sString;
    $new_text = '';
    $text_1 = explode('>',$text);
    $sizeof = sizeof($text_1);
    for ($i=0; $i<$sizeof; ++$i) {
        $text_2 = explode('<',$text_1[$i]);
        if (!empty($text_2[0])) {

                $new_text .= preg_replace('#([^\n\r .]{'. $iCount .'})#iu', '\\1  ', $text_2[0]);
        }
        if (!empty($text_2[1])) {
            $new_text .= '<' . $text_2[1] . '>';
        }
    }
    return $new_text; }
函数拆分($sString,$iCount=75)
{       
$text=$sString;
$new_text='';
$text_1=分解('>',$text);
$sizeof=sizeof($text_1);

对于($i=0;$i请考虑改用内置函数?

我使用函数在FireStats中拆分字符串


您可能可以脱离上下文使用它。请注意,它正在调用一些其他函数。如果愿意,您可以跳过utf8检查。

摆脱这种复杂性,使用a来提取纯文本

//Dump contents (without tags) from HTML
$pageText = file_get_html('http://www.google.com/')->plaintext;
echo "Length is: " . strlen($pageText); 

如果您担心对的UTF-8支持,那么您需要:

function utf8_wordwrap($str, $width = 75, $break = "\n") // wordwrap() with utf-8 support {
    $str = preg_split('#[\s\n\r]+#', $str);
    $len = 0;
    foreach ($str as $val) {
        $val .= ' ';
        $tmp = mb_strlen($val, 'utf-8');
        $len += $tmp;
        if ($len >= $width) {
            $return .= $break . $val;
            $len = $tmp;
        }
        else {
            $return .= $val;
        }
    }
    return $return;
}
资料来源:


至于您对代码点的问题-您可能想看看,我认为它将代码点(例如,
ß
)转换为它们所代表的字符。您需要给它一个字符集,以便它知道223的含义(因为“223”的含义取决于字符集)

WordWrp的问题是,它可以在UTF8宽字符的中间中断线(渲染字符串无效UTF8)或者在像NSBP这样的HTML元素的中间,弄乱它。谢谢“HTMLIN TyType解码”的提示。.我使用了该功能,并将其包含在我正在进行的工作中,它似乎工作得非常完美。再次感谢!
function utf8_wordwrap($str, $width = 75, $break = "\n") // wordwrap() with utf-8 support {
    $str = preg_split('#[\s\n\r]+#', $str);
    $len = 0;
    foreach ($str as $val) {
        $val .= ' ';
        $tmp = mb_strlen($val, 'utf-8');
        $len += $tmp;
        if ($len >= $width) {
            $return .= $break . $val;
            $len = $tmp;
        }
        else {
            $return .= $val;
        }
    }
    return $return;
}