Miten olisi mahdollista pilkkoa merkkijono niin, että joka 20:nen kymmenennen merkin jälkeen tulisi <br /> tagi. Kannattaako tieto tallentaa näin jo tietokantaan vai voisiko tämän toteuttaa helposti lukuvaiheessa.
Yleensä ei kannata tallentaa tietokantaan tuolla tavalla muokattua tietoa, jos se ei ole tiedon sisältöön liittyvä seikka. Se aiheuttaa ongelmia, jos päätätkin joskus muuttaa rivit vaikkapa 25 merkin mittaisiksi.
Onko tekstissä valmiiksi rivinvaihtoja, ja kuinka nämä pitäisi käsitellä? Tässä on muutama vaihtoehto 3 merkin välein katkomiseen:
<?php $br = "<br />"; // Tapa 1: echo chunk_split("abcd\nefgh", 3, $br); /* Tulostaa: abc<br />d e<br />fgh<br /> */ // Tapa 2: $str = "abcd\nefgh"; $arr = explode("\n", $str); foreach ($arr as &$rivi) { // rivi kerrallaan sama kuin yllä, mutta otetaan vielä rivin lopusta br pois $rivi = substr(chunk_split($rivi, 3, $br), 0, -strlen($br)); } // liitetään rivit yhteen niin, että jokainen rivi on yksi kappale (<p>) $str = "<p>".implode("</p>\n<p>", $arr)."</p>\n"; echo $str; /* Tulostaa: <p>abc<br />d</p> <p>efg<br />h</p> */ // Tapa 3: $str = "abcd\nefgh"; // Lisätään br:t $str = preg_replace("|(.{3})(?=.)|", "\\1$br", $str); // Tehdään vielä kappalejako rivinvaihtojen kohdalta $str = "<p>".str_replace("\n", "</p>\n<p>", $str)."</p>\n"; echo $str; /* Tulostaa: <p>abc<br />d</p> <p>efg<br />h</p> */ ?>
pari lisää <?php $teksti = "Tämä teksti jakautuu kolmelle riville, numero 25 = merkkien max määrä rivillä."; $uusi = preg_replace("/.{25}\\S* /", "\\0\n", $teksti); echo "<pre>----------\n$uusi</pre>"; ?> ja php.netin versio <?php $text = "The quick brown fox jumped over the lazy dog."; $newtext = wordwrap($text, 20, "<br />\n"); echo $newtext; ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.