Autor Zpráva
24k
Profil *
Bry ranko,

pouzivam vlastni bezchybny ereg_replace na svoje forum a komentare kdyz nekdo napise http://www.neco.cz aby se to premenilo na odkaz (slovem i kliknutim). Dale pouzivam fci Wordwrap na rozdeleni dlouheho slova (40 znaku).
Nicmene pokud nekdo napise hodne dlouhy odkaz coz se proste obcas stane (linky na zahranicni fotbalova fora apod.) tak mi to ten odkaz zmrsi a rozdeli treba nadvakrat.

Jak se toto resi?
24k
Profil *
tak nic, zdatnejsi kolega mi napsal paradni funkci ;)
Anonymní
Profil *
funguje bezvadně i bez nějakých funkcí $web = wordwrap( $web, 55, "\n", 1);
na zalomení nepoužívej znak <br> ale \n
Marcus Flintus
Profil *
používám ještě lepší vychytávku, možná něco na způsob toho, co ti napsal kolega ... (pokud to byl MzM, tak to je to samý...) ->



/* -------------------- -------------------- function Htmlwordwrap() ---------------- -------------------
prida $separator, aby vysledny text bylo mozno zalamovat v html, vynecha tagy
$str - text na rozdeleni
$cols - max delka radku
$separator - vlozi se za dlouhe text, jako oddělaovač
*/
function Htmlwordwrap($str, $cols) {
$separator = " ";
$tag_open = '<';
$tag_close = '>';
$in_tag = false;
$segment_width = 0;
$ret_val = "";

for ($i=0 ; $i<strlen($str) ; $i++) {
if ($str[$i] == $tag_open) {
$in_tag = true;
} elseif ($str[$i] == $tag_close) {
$in_tag = false;
} elseif ($in_tag == false) {
$segment_width++;
if (strpos(" \n\r\t", $str[$i]) !== false) {
$segment_width = 0;
}
if ($segment_width > $cols) {
$ret_val .= " ";
$segment_width = 0;
}
}
$ret_val .= $str[$i];
}
return $ret_val;
}
24k
Profil *
NJ kolega rulez kdyz ma naladu ;)
krteczek
Profil
Nabízím trošku jiný postup ;-)

<?php
function preved_na_odkaz($slovo)
{
//vstupní proměnná $slovo je text bez mezer (prostě jedno slovo)
$vrat="";
$max_delka_slova=25;
//kontrola jestli začíná na www. (je to adresa?)
if(preg_match("#^www.(.*)$#",$slovo))
{
//ano je, použijeme ji a sestavíme html odkazu na stránku
$vrat.=' <a href="http://'.$slovo.'">';
//zkontrolujeme délku slova, jestli není delší než
//$max_delka_slova.
if(strlen($slovo)>$max_delka_slova)
{
//pokud je adresa dlouhá zkrátíme ji na $max_delka_slova znaků
//(jen to co je vidět na stránce)
$vrat.=substr($slovo, 0,Max_delka_slova).'...</a> ';
}
else
{
$vrat.=$slovo.'</a> ';
}
}
else
{
$vrat=$slovo
}
return $vrat;
}
?>

krteczek
Školník
Profil
krteczek pěkný řešení :-)
24k
Profil *
NJ jenze my se tady bavime o urcitem vypisu z DB a ne o prevodu jednoho jedineho slova na odkaz
krteczek
Profil
24k: jenže já parsuji text ještě před uložením do databáze, a ukládám obě verze, upravenou i originální. takže upravená se zobrazuje a původní slouží k dalším případným úpravám, kdy se opět projde celý púvodní kód a ukládají se obě verze.

Ono parsovat text až při zobrazování mi přijde jako zdržování a zbytečné zatěžování serveru. Je rozdíl jestli se parsuje text jen jednomu uživateli (autorovi při ukládání do databáze) nebo všem (uživatelům při zobrazení jakékoliv stránky)")

funkce kterou jsem zde uvedl je upravená čás jiné funkce kterou na parsování textu používám, a postup je zhruba takový:
1. funkce vezme text a pokusí se udělat nejprve pořádek s tečkama, vykřičníky, otazníky...,
2. rozdělí text do bloků podle odentrování ({2,}x enter => 2xenter => bloky textu
3. projde jednotlivé bloky textu a snaží se zjistit co obsahují. Používám syntax podobnou Texy! ale má funkce není ani zdaleka tak komplexní.
Zatím umí: Nadpisy [== h2, ====== h6], seznamy [- => ul](jen ul, ale i zanořené, podle počtu - na začátku řádku provede zanoření), odstavce.
3.1. u jednotlivých bloků kódu lze použít zdůraznění textu (<em>, <strong> a <strong><em>) , parsuje předložky a přidává za ně pevnou mezeru,
3.2jednotlivé části zdrojáku je možno ostylovat inline styly., které se vkládají před koncový prvek elementu který chceme stylovat.
...

Funkce nakonec vyplivne upravený text který uložím do databáze zvlášť, uložím i originální text pro možnosti dalších úprav.

Na Formatuj 0.2 jsem si Vytvořil takový malý testovací formulář, kde si můžete vyzkoušet jak se s funkcí pracuje. Ještě jednou připomínám (pro rejpaly), že na funkci dělám asi týden, že není ani zdaleka tak komplexní jako Texy!, které
je sexy
, ale mi nevyhovovalo.
Na uvolnění funkce pro volnou distribuci je bohužel ještě hodně brzy. Na vylepšování pracuji ve volných chvílích...
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.

0