Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Merkkijono poikki 20 merkin välein

Vasta_alkaja [24.11.2008 10:33:51]

#

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.

Metabolix [24.11.2008 10:53:37]

#

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>
*/
?>

peg [24.11.2008 19:08:50]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta