Question

I want the random text from Lorem Ipsum so I can use it when generating webpages. I can't find any PHP functions that does this and I'm wondering if there's any publicly available libraries or APIs on sites that could be used to get some random text?

Était-ce utile?

La solution

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

Docs in the bottom right of this page:

Just do a GET request on loripsum.net/api, to get some placeholder text. You can add extra parameters to specify the output you're going to get. Say, you need 10 short paragraphs with headings, use http://loripsum.net/api/10/short/headers. All of the possible parameters are:

  • (integer) - The number of paragraphs to generate.
  • short, medium, long, verylong - The average length of a paragraph.
  • decorate - Add bold, italic and marked text.
  • link - Add links.
  • ul - Add unordered lists.
  • ol - Add numbered lists.
  • dl - Add description lists.
  • bq - Add blockquotes.
  • code - Add code samples.
  • headers - Add headers.
  • allcaps - Use ALL CAPS.
  • prude - Prude version.
  • plaintext - Return plain text, no HTML.

Autres conseils

I didn't really want to make an API call to get some random text, so I wrote it myself:

<?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'];
}

Usage:

Lorem::ipsum(5);

Sample output:

"""
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.
"""

This depends on PHP 7's CSPRNG functions, which you can either polyfill or sub out for mt_rand if you're on PHP 5.x.

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

OR you can make a function:

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;
}

Source

Use Faker

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

Sample "formatters":

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.'
<?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);

http://www.lipsum.com/

for php use:

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

or in a function:

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;
}

you have to use it's class , you have to include it in your project with this command echo Lorem::create($lang = Lorem::LANG_FA , $count = 5 , $type = Lorem::TYPE_PARAGRAPH , $end = '...'); then here is the class

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;
}

}

Just alternative for quick usage:

  • As shuffle function (not generate)
  • No external API
  • Small editable function and easy to understand/changes
  • Fixed words/length as input
  • Don't need to include large file to your project. (You will use it just a while anyway)

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;
}

Example results:

_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

Ref: How to capitalize first letter of first word in a sentence?

PS: Not a best or perfect, but ok for use.

I was looking for a quick and simple function to display lorem ipsum based on the total string/text size with no special need about commas and points and google brought me here. So if someone if looking the same, here is my cheap lazy function :

    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) ;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top