2

我正在使用 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 个空格来进行格式化。

4

1 回答 1

7

尝试这个:

$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;
于 2012-08-04T16:54:32.143 回答