如何在 PHP 中将一定数量的字符拆分字符串


How to split up a string after a certain number of characters in PHP

我正在使用PHP返回用户的浏览器用户代理 问题是我想打印它的位置:我不希望长度超过每行大约 30 个字符。有没有办法将返回的变量(来自我调用以获取字符串的函数)分解为一定长度的子字符串?由于 UA 字符串的长度不同,我不确定会发生什么。

这是我返回用户代理的 PHP 代码:

function __toString() {
    return "Browser Name:
    return "Browser Name:             {$this->getBrowser()}  'n" .
           "    Browser Version:          {$this->getVersion()} 'n" .
             "  Browser User Agent String:           {$this->getUserAgent()} 'n" .
           "    Platform:                 {$this->getPlatform()} ";
}

特别是,这个电话$this->getUserAgent .我使用这个输出:

<?php require_once('browser.php'); $browser =  new Browser(); echo $browser . "'n"; ?>

现在,名称、版本和平台调用输出就像我想要的那样(因为在 UA 字符串上没有那么长)。

简而言之,如何拆分返回的用户字符串,使其每行不超过一定数量的字符数?理想情况下,我想将它们存储到临时变量中,因为我必须在单词之间添加空格。例如,在它说"平台"的地方,它前面有空格,所以它与浏览器版本垂直排列,然后是空格,以便从函数返回的所有字符串的结果对齐。

如果有人想让上面的 Github 代码看到我在做什么,函数调用在第 339-243 行,回显的结果在第 152 行。

在这一点上,我非常非常接近

只需要帮助在换行文本之前添加空格(请参阅下面的答案)

这就是我现在拥有的:

$text1   = $this->getUserAgent();
$UAline1 = substr($text1, 0, 26);
$text2       = $this->getUserAgent();
$towrapUA    = str_replace($UAline1, '', $text2);
$wordwrapped = chunk_split($towrapUA, 26, "'n'r");

此时唯一的问题是,我如何在每个包装的代码之前获得恒定数量的空格?我需要(比方说)在所有换行之前有 20 个空格进行格式化。

试试这个:

$str = chunk_split($string, 30, "'n'r");
// Splits a string after X chars (in this case 30) and adds a line break

您也可以使用正则表达式尝试:

$str = preg_replace("/(.{30})/", "$1'n'r", $string);

或者,正如上面的评论中所建议的,这做了同样的事情:

$str = wordwrap($string, 30, "<br />'n");

更多信息:

http://php.net/manual/en/function.chunk-split.php

http://us2.php.net/wordwrap

编辑:

根据您编辑的问题,看起来这就是您要查找的内容:

$text1    = $this->getUserAgent();
$UAline1  = substr($text1, 0, 26);
$towrapUA = str_replace($UAline1, '', $text1);
$space = str_repeat('&nbsp;', 20);
$wordwrapped = wordwrap($towrapUA, 26, "'n");
$wordwrapped = explode("'n", $wordwrapped); // Split at ''n'
$numlines = count($wordwrapped) - 1;
$string   = '';
$i = 0;
foreach($wordwrapped as $line) {
    if($i < $numlines) {
        $string .= $space . $line . "'n'r"; // Add 'n'r back in if not last line
    } else {
        $string .= $space . $line; // If it's the last line, leave off 'n'r
    }
    $i++;
}
echo $string;