Autor | Zpráva | ||
---|---|---|---|
Birky Profil * |
#1 · Zasláno: 1. 2. 2007, 22:06:32
Čau. Chtel jsem si udělat vlastní knihu návštěv (aby byla součást mého webu, né externí), to se mi částečně povedlo, ale mam problém s formátem textu vložených příspěvků. Napřiklad když nechám vložit text o mnoha písmenech bez mezer, tak mi to úplně rozhodí stránku, protože to vypíše slovo v jednom řádku. Potřeboval bych poradit jakým způsobem udělat aby ase dlouhé slovo bez mezer nějak rozumě sformátovalo.
V php bohužel moc neumím, knihu jsem okopíroval někde na webu a částečně jsem čerpal z guestbooku na stránkách java.tatousek.cz. Děkuji za všechny rady. Zdrojový kód guestbooku: <head> <title>kniha</title> </head> <body> <p align="center"><b><font size="4">Guestbook</font></b></p> <form name="form" method="post" action="kniha.php3?action=uloz"> <table width="486"><tr><td>Jméno:</td><td> <input type="text" name="jmeno" size="16" /</td> </tr><tr><td>E-mail:</td><td><input type="text" name="mail" value="@" size="16" /></td></tr> <tr><td valign="top">Vzkaz:</td> <td><textarea name="vzkaz" cols="40" rows="5"></textarea></td></tr> <tr><td></td><td><input type="submit" value="Odeslat"> <input type="Reset" value="Vymazat"></td></tr> </table></form> <?php if ($action=='uloz'): $soubor = "kniha.body"; @$ext = fopen($soubor, "r"); @$obsah = fread($ext, filesize($soubor)); @FClose($ext); if (($vzkaz=="") or ($jmeno=="")): echo "<h6>Nejsou vyplněny požadované údaje</h6>"; else: $ext = fopen("kniha.body", "w"); $mail = HTMLSpecialCHars($mail); if($mail == "") $mail = ""; else $mail = "<a href="mailto:$mail">".$mail."</a>"; $jmeno = HTMLSpecialCHars($jmeno); $vzkaz = HTMLSpecialCHars($vzkaz); $vzkaz = SubStr($vzkaz, 0, 1500); $tab = "<tr><td width="300" >".$jmeno."</td><td align="right">".Date(" d/m/Y H:i:s")."</td></tr><tr><td colspan="2">".$mail."</td></tr><tr><td width="150">".$vzkaz."</td></tr><tr><td colspan="2"><hr size="1"></td></tr>"; fputs($ext, "$tab"); fputs ($ext, "$obsah"); FClose($ext); @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; else: @$ext = fopen("kniha.body", "r"); @fpassThru($ext); endif; ?> </body> </html> |
||
Birky Profil * |
#2 · Zasláno: 2. 2. 2007, 13:22:53
Problém se zalamováním jsem již vyřešil, příkazem wordwrap.
Konkrétně takto: $newvzkaz = wordwrap( $vzkaz, 8, " ", 1); Teď mam ale další problémy: V knize se mi znaky Řěřč zobrazují jako nějaký kód ( 83;& ;#269;&a mp;#345). A také mi vždy zmizí formatování textu. třeba když napíšu : acb def tak se to vypíše jako abc def |
||
Birky Profil * |
#3 · Zasláno: 2. 2. 2007, 13:50:26
Problém se zobrazováním diakritiky jsem už taky vyřešil. Použitím jiného kódování.
Teď už by mě zajímalo jen to zachování formátování textu. A eventuelně jakým způsobem se dá v guestbooku měnit barva písma... nějak mi to nejde... |
||
Joker Profil |
#4 · Zasláno: 2. 2. 2007, 15:04:38
Birky
wordwrap( $vzkaz, 8, " ", 1); může být zdrojem minimálně části těch problémů. wordwrap na 8 znaků je málo; například ve Vašem posledním příspěvku by se rozhodila slova: zobrazováním, diakritiky, zachování, formátování, eventuelně, guestbooku. Nehledě na to, že funkce wordwrap() nezná UTF kódování a netuší, že některé znaky mohou zabírat dva bajty... takže za prvé se těch 8 znaků dál snižuje potenciálně až jenom na 4 znaky a jednak se může mezera vložit "dovnitř znaku". Navíc s posledním parametrem $cut=1 se mezera vloží vždy, i když není potřeba Počet znaků, po kolika se zalamuje, bych nastavil někam na hodnotu blízkou maximální šířce řádku, která ještě nerozhodí stránku., a dál bych nedával poslední parametr 1. Ad formátování, pochopitelně, že se vymaže. Jak známo, v HTML se znak nového řádku formátuje jako mezera. Buď můžete celý příspěvek uzavřít do prvku <pre>, nebo aplikovat nl2br() ... ale až potom, co uděláte wordwrap a htmlspecialchars()! Mimochodem, to pořadí by mělo být takovéhle: 1. wordwrap 2. htmlspecialchars 3. nl2br |
||
Birky Profil * |
#5 · Zasláno: 3. 2. 2007, 12:29:04
Děkuji za radu. Už vše funguje jak má.
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0