2

PHPを使用してユーザーのブラウザユーザーエージェントを返しています問題は、それを印刷したい場所です。長さを1行あたり約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文字列の長さに近いものはないため)。

つまり、返されたユーザー文字列を分割して、1行あたりの特定の文字数を超えないようにするにはどうすればよいですか?理想的には、単語の間にスペースを追加する必要があるため、一時変数に格納したいと思います。たとえば、「プラットフォーム」と表示されている場合、その前にスペースがあるため、ブラウザバージョンと垂直に並んでから、関数から返されたすべての文字列の結果が並ぶようにスペースがあります。

上記の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 に答える