Autor Zpráva
Birky
Profil *
Č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 *
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 *
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
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 *
Děkuji za radu. Už vše funguje jak má.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0