Autor Zpráva
liborse
Profil
Dobrý den,

mám (zřejmě) jednoduchý problém. Mám formulář a v něm jednu kolonku "Adresa", uživatel do ní vyplní adresu, přičemž logicky odentruje za každým řádkem adresy. Potíž je v tom, že když toto zpracuji funkcí mail(), tak se řádkování ztratí. Potřebuji tedy jednoduše převést znak řádkování na tag <BR> (ale nevím, jaký zástupný znak se používá pro znak odřádkování. Data z formuláře posílám PHP skriptu.

Nevíte někdo, jak se s tím poprat? Díky
Alphard
Profil
fce nl2br();
DFly
Profil
ztratit by se to nemelo - ve fci mail() to normalne funguje a do HTML viz predchozi
nightfish
Profil
ztratit by se to nemelo
ono se to neztratí, ale když mailu nastavíš content/type na text/html, tak se samozřejmě odřádkování udělané jinak než pomocí <br> ignoruje (stejně jako v HTML stránkách) - pokud ovšem není třeba v <pre>..</pre>
liborse
Profil
Tu funkci nl2br samozřejmě znám, ale s tou mi to nefunguje. Přijde mi, že řádkování se "ztratí" už při zadávání ve formuláři. Sice jsem si nastavil políčko, kde se dá odentrovat, ale asi je tam něco blbě....
shamania
Profil
ale nevím, jaký zástupný znak se používá pro znak odřádkování
"\n"
Freeze
Profil *
Řeším něco podobného ... akorát s tím, že potřebuji v tom zadaném textu něco nahradit - chtěl jsem použít
preg_replace('/[upr](.*?)[/upr]/i', '<span class="upr">$1</span>', $p_text);
ale zastupny znak . mi bohuzel nesebere konce radku a tudiz text

'[upr] sgb [/upr]'

se zpracuje, ale

'[upr] sgb
ags[/upr]'

už ne. Neví někdo jak vyřešit toto? :))
DoubleThink
Profil *
Freeze
Použij modifikátor: m (PCRE_MULTILINE)
Freeze
Profil *
Takze to bude vypadat takto : preg_replace('/[upr](.*?)[/upr]/im', '<span class="upr">$1</span>', $p_text);
Dik moc :)
Freeze
Profil *
Hm... ale nefungoval to, tak jsem si to našel ... má se použít modifikátor s .

cituji:

i ignore case nerozlišování malých/velkých písmen
s single line . odpovídá i znaku (nový řádek)
m multiple lines ^/$ odpovídá i začátku/konci každého řádku
x extended bílé znaky a komentáře (znaky vpravo od #) jsou ignorovány
g global match hledány všechny části řetězce, které odpovídají regulárnímu výrazu

(z regularnivyrazy.info)
Psanec
Profil *
$neco = str_replace(" "," <br> ", $neco); //nové řádky nahradí <br>
Kocmi
Profil
Dobrý den,
mám podobný problém, ve formuláři uživatel napíše vzkaz, který se uloží do databáze. Jenže když jej chci zobrazit, třeba jako příspěvek, nezobrazí se to tak, jak to uživatel napsal. "Ztratí se" řádkování, když někde napsal hodně mezer, tak se zobrazí jen jedna, prostě normání formátování HTML. Potřeboval bych poradit co s tím mám udělat, třeba jestli existuje nějaká fce v PHP, CSS, nebo HTML co s \n zalomí řádek a když někde bude třeba 10 mezer, tak je zobrazí všechny. Kdybych použil funkci nl2br() sice by se mi to řádkovalo, ale nic to neudělá s těmi mezerami. A také tato funkce nahradí konce řádků za <br />, ale já mám stránky v HTML a pak to není validní.
Napadlo mě použít funkci něco jako:
str_replace("\n", "<br>", str_replace("  ", " &nbsp;", $prispevek));


Ale zdá se mi to hodně neohrabané. Neznáte nějaké jiné řešení?
AM_
Profil
str_replace můžeš předávat pole, takže:
str_replace(array("\n", "  "), array("<br>", " &nbsp;"), $prispevek)

nebo alespoň dávat každý do nového příkazu, vrstvit je na sebe tak, jak to děláš ty, je trochu nepřehledné.
Nebo můžeš použít HTML tag <pre>, který zachovává textové formátování, popřípadě si ho patřičně nastylovat, aby odpovídal zbytku dokumentu.
_es
Profil
Kocmi
Neznáte nějaké jiné řešení?
<PRE>
Kocmi
Profil
Aha tak o tom <pre> jsem nevěděl, tak děkuji už mi to funguje
strejda
Profil *
A ještě:

<?php 
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D"); 
$word = "ZBB2"; 
echo strtr($word,$arr); 
?> 

Příjde mi to jako elegantní řešení, navíc to pole se dá kdykoli znovu použít pro "čištění" dalšího řetězce.
(zdroj: cz2.php.net/str_replace)

Ještě drobný poznatek: Nestačí se zbavit \n obdobné je i \r .

Nevíte někdo o přehledu všech takových zástupných značek(\n,\r, \t, \0, \x, \s, .. ) co zná PHP? Znám jenom dvě z nich :-(

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: