Autor Zpráva
MIsa
Profil *
Ahoj lidi. Mám takovej problém... Do databáze ukládám to co uživatel napíše do TEXTAREA ... mám to při uložení ošetřené htmlspecialchars a všecho se to v pohodě ukládá, ale když tam uléžím něco jako tohle :

Ahoj,

jmenuji se Míša. :o)

...a chci to zpětně vypsat na stránku tak se mi to vypíše takhle : Ahoj, jmenuji se Míša. :o) Takže jsem to celé zkusil ošetřit nl2br a už to dodržuje entery, ale né mezery. A celý se to ještě komplikuje, protože potřebuju aby toho PHP dělalo z odkazů prostě odkazy... aby když tam někdo napíše http://www.google.com tak aby to byl prostě klikací odkaz. Na to jsem si napsal tenhle script :

$Pole = explode(" ", $poznamka);
for ($x=0; $x<=(count($Pole)-1); $x++) {      
     if(substr($Pole[$x],0,7)=="http://"){
           $Pole[$x] = '<a href="'.$Pole[$x].'" onclick="document.getElementById();" target="_blank">'.$Pole[$x]."</a>";
     }
}
$poznamka = implode(" ", $Pole);

jenomže v kombinaci s ním už mi to nl2br nefunguje vůbec. Čili bych potřeboval něco co vyřeší moje problémy tak že, bude chápat interaktivní odkazy a bude dodržovat přesný styl napsaného textu tak jak ho napsal uživatel. Pokoušel jsem se to řešit růžně, ale už vážně nevim.
Keeehi
Profil
MIsa:
htmlspecialchars při uložení je špatně. Při uložení jen mysql_real_escape_string.

A na výpisu:
echo nl2br(preg_replace('~(http://.*?)(?=\s|$)~','<a href="$1" target="_blank">$1</a>',htmlspecialchars($vstup)));
MIsa
Profil *
Keeehi:
Ty jo super... díky moc, ono to funguje :o)) ale ještě jeden háček to má... pořád to nedodržuje mezery, ale já se v těch regulárních výrazech nevyznám zatím moc. Když tam napíšu : Ahoj čau
tak se to stejně vypíše jako : Ahoj čau
Keeehi
Profil
MIsa:
A co jiného by to mělo vypsat?
MIsa
Profil *
Aha... takdy to taky tak nefuguje... když udělám

test mezer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; konec


Keeehi:
No já bych chtěl aby to dodržovalo i mezery.... když jich mezi slovem udělám 50 tak aby jich tam bylo 50, ale nejde to ukázat protože tady to taky nefunguje
Keeehi
Profil
MIsa:
Když to obalíš do [pre], tak to tady na fóru fungovat bude.

Jinak to je normální vlastnost html, že bílé znaky slučuje do jednoho. Buď více mezer nahradíš za &nbsp; nebo to obejdeš pomocí CSS white-space: pre.
MIsa
Profil *
Keeehi:
Jůůůů :o)))
<div style="white-space: pre">
Děkuji ti.


Ale.... jenom bych chtěl dodat pro ostatní, že jsem nakonec použil echo '<div style="white-space: pre-wrap">'; protože jinak to přestane automaticky zalamovat řádky a každej delší text je na jednom řádku. Ale už to funguje uplně jedna báseň teď. :o)
MIsa
Profil *
Ještě jednou sem musím vstoupit. S tímhle je neco špatně.
echo nl2br(preg_replace('~(http://.*?)(?=\s|$)~','<a href="$1" target="_blank">$1</a>',htmlspecialchars($vstup)));
protože kdy napíšu tenhle text :

Dobrý den,
s tímhle je něco špatně.
Ahoj

Tak se zobrazí jako :

Dobrý den,

s tímhle je něco špatně.

Ahoj


to ale není dobře.


Tak už nic :o) white-space: nowrap vyřešeno


Tak ne :o(( když použiju white-space: nowrap, tak to ignoruje mezery na začátku řádku například a když použiju white-space: pre-wrap tak se to chová tak jak jsem popsal víše. :o/


a když udělám div style="white-space: pre , tak to přestane automaticky zalamovat řádky a každej delší text je na jednom řádku.
MIsa
Profil *
takže jsem vyzkoušel ještě $vstup = str_replace(" ","&nbsp;",$vstup); a taky je to špatně


respektive.... to sice funguje... já jsem tam dal ty tvrdý mezery teď vypnul jsem htmlspecialchars při výstupu a de to, ale !!!! .... né na začátku řádku... tam i kdyby těch mezer bylo 6000 tak tam neudělá ani jednu. ten první řádek prostě nemůže začínat mezerou?
MIsa
Profil *
Tak nic no. Nepokoušejte se mi pomoct protože jsem pták no. Celou dobu jsem to v předchozim scriptu trimoval. Takže asi tak. Už to de.
Keeehi
Profil
Moc jsem vám nerozuměl, ale ten regulár je napsaný tak aby si všímal jen odkazů, s konci řádků by to nemělo mít nic společného.
Pokud používáte white-space: pre, pak zase vynechte funkci nl2br.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: