如何在PHP中从lorem Ipsum中获取随机文本


How to get random text from lorem Ipsum in PHP?

我想要Lorem Ipsum的随机文本,这样我就可以在生成网页时使用它。我找不到任何能做到这一点的PHP函数,我想知道网站上是否有任何公开的库或API可以用来获取一些随机文本?

$content = file_get_contents('http://loripsum.net/api');

本页右下角的文档:

只需在loripsum.net/api上执行GET请求,即可获得一些占位符文本您可以添加额外的参数来指定要进行的输出获得。比方说,你需要10个带标题的短段落,使用http://loripsum.net/api/10/short/headers.所有可能的参数都是:

  • (integer)-要生成的段落数
  • 短、中、长、超长——一段话的平均长度
  • 装饰-添加粗体、斜体和标记文本
  • link-添加链接
  • ul-添加无序列表
  • ol-添加编号列表
  • dl-添加描述列表
  • bq-添加块引号
  • code-添加代码示例
  • headers-添加标头
  • allcaps-使用ALL CAPS
  • 普鲁德-普鲁德版本
  • 纯文本-返回纯文本,不返回HTML

我真的不想调用API来获得一些随机文本,所以我自己写了它:

<?php
abstract class Lorem {
    public static function ipsum($nparagraphs) {
        $paragraphs = [];
        for($p = 0; $p < $nparagraphs; ++$p) {
            $nsentences = random_int(3, 8);
            $sentences = [];
            for($s = 0; $s < $nsentences; ++$s) {
                $frags = [];
                $commaChance = .33;
                while(true) {
                    $nwords = random_int(3, 15);
                    $words = self::random_values(self::$lorem, $nwords);
                    $frags[] = implode(' ', $words);
                    if(self::random_float() >= $commaChance) {
                        break;
                    }
                    $commaChance /= 2;
                }
                $sentences[] = ucfirst(implode(', ', $frags)) . '.';
            }
            $paragraphs[] = implode(' ', $sentences);
        }
        return implode("'n'n", $paragraphs);
    }
    private static function random_float() {
        return random_int(0, PHP_INT_MAX - 1) / PHP_INT_MAX;
    }
    private static function random_values($arr, $count) {
        $keys = array_rand($arr, $count);
        if($count == 1) {
            $keys = [$keys];
        }
        return array_intersect_key($arr, array_fill_keys($keys, null));
    }
    private static $lorem = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'praesent', 'interdum', 'dictum', 'mi', 'non', 'egestas', 'nulla', 'in', 'lacus', 'sed', 'sapien', 'placerat', 'malesuada', 'at', 'erat', 'etiam', 'id', 'velit', 'finibus', 'viverra', 'maecenas', 'mattis', 'volutpat', 'justo', 'vitae', 'vestibulum', 'metus', 'lobortis', 'mauris', 'luctus', 'leo', 'feugiat', 'nibh', 'tincidunt', 'a', 'integer', 'facilisis', 'lacinia', 'ligula', 'ac', 'suspendisse', 'eleifend', 'nunc', 'nec', 'pulvinar', 'quisque', 'ut', 'semper', 'auctor', 'tortor', 'mollis', 'est', 'tempor', 'scelerisque', 'venenatis', 'quis', 'ultrices', 'tellus', 'nisi', 'phasellus', 'aliquam', 'molestie', 'purus', 'convallis', 'cursus', 'ex', 'massa', 'fusce', 'felis', 'fringilla', 'faucibus', 'varius', 'ante', 'primis', 'orci', 'et', 'posuere', 'cubilia', 'curae', 'proin', 'ultricies', 'hendrerit', 'ornare', 'augue', 'pharetra', 'dapibus', 'nullam', 'sollicitudin', 'euismod', 'eget', 'pretium', 'vulputate', 'urna', 'arcu', 'porttitor', 'quam', 'condimentum', 'consequat', 'tempus', 'hac', 'habitasse', 'platea', 'dictumst', 'sagittis', 'gravida', 'eu', 'commodo', 'dui', 'lectus', 'vivamus', 'libero', 'vel', 'maximus', 'pellentesque', 'efficitur', 'class', 'aptent', 'taciti', 'sociosqu', 'ad', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos', 'himenaeos', 'fermentum', 'turpis', 'donec', 'magna', 'porta', 'enim', 'curabitur', 'odio', 'rhoncus', 'blandit', 'potenti', 'sodales', 'accumsan', 'congue', 'neque', 'duis', 'bibendum', 'laoreet', 'elementum', 'suscipit', 'diam', 'vehicula', 'eros', 'nam', 'imperdiet', 'sem', 'ullamcorper', 'dignissim', 'risus', 'aliquet', 'habitant', 'morbi', 'tristique', 'senectus', 'netus', 'fames', 'nisl', 'iaculis', 'cras', 'aenean'];
}

用法:

Lorem::ipsum(5);

样本输出:

"""
Ligula ornare commodo elementum. Cursus gravida bibendum. Lacus integer auctor primis ad odio suscipit diam, justo feugiat hendrerit. Ipsum suspendisse nunc tempor ultrices orci odio potenti imperdiet netus fames. Viverra feugiat sollicitudin euismod commodo dui lectus magna sem aliquet cras, sit mattis vulputate enim eros. Interdum a primis orci arcu porttitor taciti. Maecenas mauris mollis purus nullam enim laoreet aliquet, maecenas feugiat auctor vulputate quam condimentum vehicula tristique. Consectetur mauris auctor sollicitudin.'n
'n
Sit at tincidunt lacinia nec tempus conubia bibendum fames. Justo massa odio. Sit praesent tincidunt nisi molestie cursus ornare tempus class duis, dolor vitae luctus eleifend ut curae hendrerit vulputate dui aptent litora suscipit dignissim, sed auctor ultricies dictumst vel. Etiam mattis a est phasellus felis posuere pharetra consequat platea taciti torquent neque nisl cras. Adipiscing in viverra a molestie fusce pretium tempus porta curabitur. Aptent risus nisl.'n
'n
Ipsum quisque auctor venenatis varius posuere hendrerit eu libero vel taciti ad conubia cras, placerat nec phasellus gravida aliquet. Dictum lacus leo facilisis ut quis gravida litora bibendum laoreet. Interdum tincidunt ac suspendisse venenatis nullam pretium hac himenaeos diam vehicula.'n
'n
Nulla eleifend varius hendrerit condimentum efficitur fames. Metus pulvinar pretium habitasse vivamus efficitur turpis porta rhoncus elementum netus. Mollis phasellus fusce nullam eu vel sodales duis.'n
'n
Ipsum egestas pulvinar tortor venenatis fusce consequat pellentesque class fermentum potenti suscipit diam tristique. Sit tellus magna. Lobortis venenatis quis nisi condimentum nostra ullamcorper.
"""

这取决于PHP 7的CSPRNG函数,如果您使用的是PHP 5.x,则可以对mt_rand进行polyfill或sub-out。

使用伪造

$faker = Faker'Factory::create();
echo $faker->text;

示例"格式化程序":

word                                             // 'aut'
words($nb = 3, $asText = false)                  // array('porro', 'sed', 'magni')
sentence($nbWords = 6, $variableNbWords = true)  // 'Sit vitae voluptas sint non voluptates.'
sentences($nb = 3, $asText = false)              // array('Optio quos qui illo error.', 'Laborum vero a officia id corporis.', 'Saepe provident esse hic eligendi.')
paragraph($nbSentences = 3, $variableNbSentences = true) // 'Ut ab voluptas sed a nam. Sint autem inventore aut officia aut aut blanditiis. Ducimus eos odit amet et est ut eum.'
paragraphs($nb = 3, $asText = false)             // array('Quidem ut sunt et quidem est accusamus aut. Fuga est placeat rerum ut. Enim ex eveniet facere sunt.', 'Aut nam et eum architecto fugit repellendus illo. Qui ex esse veritatis.', 'Possimus omnis aut incidunt sunt. Asperiores incidunt iure sequi cum culpa rem. Rerum exercitationem est rem.')
text($maxNbChars = 200)                          // 'Fuga totam reiciendis qui architecto fugiat nemo. Consequatur recusandae qui cupiditate eos quod.'
$lipsum = simplexml_load_file('http://www.lipsum.com/feed/xml?amount=1&what=paras&start=0')->lipsum;

或者你可以制作一个函数:

function random_lipsum($amount = 1, $what = 'paras', $start = 0) {
    return simplexml_load_file("http://www.lipsum.com/feed/xml?amount=$amount&what=$what&start=$start")->lipsum;
}

<?php
function lorem($count = 1, $max = 20, $standard = true) {
    $output = '';
    if ($standard) {
        $output = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, ' .
            'sed do eiusmod tempor incididunt ut labore et dolore magna ' .
            'aliqua.';
    }
    $pool = explode(
        ' ',
        'a ab ad accusamus adipisci alias aliquam amet animi aperiam ' .
        'architecto asperiores aspernatur assumenda at atque aut beatae ' .
        'blanditiis cillum commodi consequatur corporis corrupti culpa ' .
        'cum cupiditate debitis delectus deleniti deserunt dicta ' .
        'dignissimos distinctio dolor ducimus duis ea eaque earum eius ' .
        'eligendi enim eos error esse est eum eveniet ex excepteur ' .
        'exercitationem expedita explicabo facere facilis fugiat harum ' .
        'hic id illum impedit in incidunt ipsa iste itaque iure iusto ' .
        'laborum laudantium libero magnam maiores maxime minim minus ' .
        'modi molestiae mollitia nam natus necessitatibus nemo neque ' .
        'nesciunt nihil nisi nobis non nostrum nulla numquam occaecati ' .
        'odio officia omnis optio pariatur perferendis perspiciatis ' .
        'placeat porro possimus praesentium proident quae quia quibus ' .
        'quo ratione recusandae reiciendis rem repellat reprehenderit ' .
        'repudiandae rerum saepe sapiente sequi similique sint soluta ' .
        'suscipit tempora tenetur totam ut ullam unde vel veniam vero ' .
        'vitae voluptas'
    );
    $max = ($max <= 3) ? 4 : $max;
    $count = ($count < 1) ? 1 : (($count > 2147483646) ? 2147483646 : $count);
    for ($i = 0, $add = ($count - (int) $standard); $i < $add; $i++) {
        shuffle($pool);
        $words = array_slice($pool, 0, mt_rand(3, $max));
        $output .= ((! $standard && $i === 0) ? '' : ' ') . ucfirst(implode(' ', $words)) . '.';
    }
    return $output;
}
echo lorem(5);
// echo lorem(5, 30);
// echo lorem(1, 5, false);

我正在寻找一个快速简单的函数,可以根据字符串/文本的总大小显示lorem ipsum,而不需要逗号和点,谷歌把我带到了这里。因此,如果有人看起来一样,这里是我的廉价懒惰功能:

    function generateLoremIpsum(int $size){
    $words = ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'praesent', 'interdum', 'dictum', 'mi', 'non', 'egestas', 'nulla', 'in', 'lacus', 'sed', 'sapien', 'placerat', 'malesuada', 'at', 'erat', 'etiam', 'id', 'velit', 'finibus', 'viverra', 'maecenas', 'mattis', 'volutpat', 'justo', 'vitae', 'vestibulum', 'metus', 'lobortis', 'mauris', 'luctus', 'leo', 'feugiat', 'nibh', 'tincidunt', 'a', 'integer', 'facilisis', 'lacinia', 'ligula', 'ac', 'suspendisse', 'eleifend', 'nunc', 'nec', 'pulvinar', 'quisque', 'ut', 'semper', 'auctor', 'tortor', 'mollis', 'est', 'tempor', 'scelerisque', 'venenatis', 'quis', 'ultrices', 'tellus', 'nisi', 'phasellus', 'aliquam', 'molestie', 'purus', 'convallis', 'cursus', 'ex', 'massa', 'fusce', 'felis', 'fringilla', 'faucibus', 'varius', 'ante', 'primis', 'orci', 'et', 'posuere', 'cubilia', 'curae', 'proin', 'ultricies', 'hendrerit', 'ornare', 'augue', 'pharetra', 'dapibus', 'nullam', 'sollicitudin', 'euismod', 'eget', 'pretium', 'vulputate', 'urna', 'arcu', 'porttitor', 'quam', 'condimentum', 'consequat', 'tempus', 'hac', 'habitasse', 'platea', 'dictumst', 'sagittis', 'gravida', 'eu', 'commodo', 'dui', 'lectus', 'vivamus', 'libero', 'vel', 'maximus', 'pellentesque', 'efficitur', 'class', 'aptent', 'taciti', 'sociosqu', 'ad', 'litora', 'torquent', 'per', 'conubia', 'nostra', 'inceptos', 'himenaeos', 'fermentum', 'turpis', 'donec', 'magna', 'porta', 'enim', 'curabitur', 'odio', 'rhoncus', 'blandit', 'potenti', 'sodales', 'accumsan', 'congue', 'neque', 'duis', 'bibendum', 'laoreet', 'elementum', 'suscipit', 'diam', 'vehicula', 'eros', 'nam', 'imperdiet', 'sem', 'ullamcorper', 'dignissim', 'risus', 'aliquet', 'habitant', 'morbi', 'tristique', 'senectus', 'netus', 'fames', 'nisl', 'iaculis', 'cras', 'aenean'];
    $lorem = '' ;
    while ($size > 0){
        $randomWord = array_rand($words) ;
        $lorem .= $words[$randomWord].' ' ;
        $size = $size - strlen($words[$randomWord]) ;
    }
    return ucfirst($lorem) ;
}

http://www.lipsum.com/

用于php:

$lipsum = simplexml_load_file('http://www.lipsum.com/feed/xml?amount=1&what=paras&start=0')->lipsum;

或者在一个函数中:

function random_lipsum($amount = 1, $what = 'paras', $start = 0) {
return simplexml_load_file("http://www.lipsum.com/feed/xml?amount=$amount&what=$what&start=$start")->lipsum;
}

您必须使用它的类,您必须使用以下命令echo Lorem::create($lang = Lorem::LANG_FA , $count = 5 , $type = Lorem::TYPE_PARAGRAPH , $end = '...');将它包含在您的项目中那么这是类

class Lorem {
const TYPE_WORD = 1;
const TYPE_CHAR = 2;
const TYPE_PARAGRAPH = 3;
const LANG_EN = 'en';
static private $en = 'Lorem ipsum ';
static function create($lang = self::LANG_FA, $count = 10, $type = self::TYPE_WORD, $end = '...') {
    $out = '';
    if ($lang == self::LANG_FA)
        $lorem = self::$fa;
    else
        $lorem = self::$en;
    switch ($type) {
        case self::TYPE_WORD :
        $words = explode(' ', $lorem);
        $i = 0;
        foreach ($words as $word) {
            if ($i == $count)
                break;
            $out .= ' ' . $word;
            $i++;
        }
        break;
        case self::TYPE_CHAR :
        for ($i = 0; $i <= $count; $i++) {
            $out .= $lorem[$i];
        }
        break;
        case self::TYPE_PARAGRAPH:
        for ($i = 0; $i < $count; $i++) {
            $out .= '<p>' . $lorem . '</p>';
        }
        break;
    }
    return $out . $end;
}

}

快速使用的唯一替代方案

  • 作为shuffle函数(不生成)
  • 无外部API
  • 可编辑功能小,易于理解/更改
  • 固定单词/长度作为输入
  • 不需要在项目中包含大文件。(无论如何,您只会使用一段时间)

function _shuffle_words($sentence) {
  $words = explode(' ', $sentence);
  shuffle($words);
  $words = strtolower(implode(' ', $words));
  $words = preg_replace_callback('/([.!?])'s*('w)/', function ($matches) {
    return strtoupper($matches[1] . ' ' . $matches[2]);
  }, ucfirst(strtolower($words)));
  return $words;
}

示例结果:

_shuffle_words("Lorem ipsum dolor sit amet") // Sit dolor lorem ipsum amet
_shuffle_words("meis aliquando consetetur ea sit") // Sit consetetur ea meis aliquando
_shuffle_words("Eu his autem facete. Consul nostrum ei his, errem voluptatibus nam. Cu brute tempor eos, vide illud pro id.")
// Tempor pro ei facete. Autem eos, errem his, consul cu vide nam. Id. Voluptatibus his brute nostrum eu illud

参考:如何将句子中第一个单词的第一个字母大写?

附言:不是最好或完美的,但可以使用