Terve!
Väsäsin kaverilleni tälläisen koodin:
<form action="" method="POST"> <textarea name="koodibox" rows="15" cols="100"></textarea> <input type="submit"> </form> <?php $koodi = $_POST["koodibox"]; $koodi = str_replace("<", "<", $koodi); $koodi = str_replace(">", ">", $koodi); $koodi = htmlspecialchars($koodi); echo $koodi; ?>
Hän tekee jotain HTML opasta, ja tarvitsisi laittaa koodeja sivulle, mutta tietenkään ihan pelkkä teksti (kuten <html>) ei näy sivulla, joten < ja > merkit tarvitsee korvata < ja > merkeillä.
Ylläolevassa koodissahan ensin koodi otti tämän kirjoitetun tekstin textareasta, muutti < ja > merkit toiseen muotoon ja lopuksi otti HTML merkinnät pois.
Nyt esimerkiksi <html> tagi tulostuu näin: <html>
Ongelmana tässä on se, että en pysty korvaamaan \n <br> merkillä, koska HTML on poistettu tuosta käytöstä (textaressa), niin rivinvaihdot eivät näy kun teksti tulostetaan.
Eli str_replace ei toimi siinä kohtaakaan.
( $koodi = str_replace("\n", "<br>", $koodi); )
Onko mahdollista, että ainoastaan <br> tagit tulosuisivat koodiin, ja laittaisi rivinvaihdot selkeyttääkseen koodia?
-Rocceri
Ps. Pieneksi selvennykseksi:
Koodi tulostuu näin: <html> <head> jne.., kun sen pitäisi tulostua (Jos siis on kirjoitettu <html> (rivinvaihto) <head>):
<html>
<head>
Rocceri kirjoitti:
Koodi tulostuu näin:
<html> <head>
kun sen pitäisi tulostua näin:
<html>
<head>
No laitat tuohon ennen echo $koodi -kohtaa että
$koodi=str_replace("\n", "<br />\n", $koodi);
Mahtavaa Grez, kiitos!
Tai käytä nl2br:ää. Ongelma saattaa olla Windows-rivinvaihdot (\r\n), ja oliko vielä Maceillakin oma versio? Tuo nl2br käsittääkseni hanskaa nuo kaikki:
https://www.php.net/nl2br
Saisiko tätä vielä muutettua tähän tyyliin:
Kun lähetä buttonia on painettu, alle ilmestyisi linkki mistä voisi ladata tämän tiedoston? :D Ei ole välttämätön, mutta ihan harjoittelun vuoksi olisi kiva.
Saisi. Onnea harjoitteluun!
tsuriga kirjoitti:
Saisi. Onnea harjoitteluun!
Kiitosta vaan... Onko vinkkiä miten voisin tehdä sen? Ei ole hajuakaan, kuten varmaan arvasitkin.
Tallennat html-koodin palvelimella .html tiedostoon, käsket selainta ladata tiedoston header funktiota käyttäen, ja sen jälkeen halutessasi tuhoat tiedoston.
Tallennat sen johonkin temp-fileen, jota sitten tyrkytätä ladattavaksi. Tietty noita sitten pitää siivoilla, kannattanee tehdä koodinpätkä joka katsoo temp-kansion tiedostot läpi ja siivoaa automaattisesti vaikka yli 30min vanhat tiedostot.
Tumettaja kirjoitti:
Tallennat html-koodin palvelimella .html tiedostoon, käsket selainta ladata tiedoston header funktiota käyttäen, ja sen jälkeen halutessasi tuhoat tiedoston.
Empä ole varma, mutta onko tämä sellainen mitä tarkoitit? (Kylläkin PDF muodossa)
<?php // We'll be outputting a PDF header('Content-type: application/pdf'); // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('original.pdf'); ?>
Mutta, tiedän miten tiedosto kirjoitetaan koodilla, mutta en osaa laittaa sitä ladattavaksi.
Jos ensiksi annan scriptille tehtävän luoda syötetystä tekstistä *.txt tiedosto, ja sitten voisin laittaa sivulle linkin mistä voi ladata. Mutta, miten saan tehtyä linkin, jolla voin ladata *.txt tiedoston?
Pistät linkin viemään seuraavanlaiselle PHP-sivulle:
Eli siis, ensin PHP scripti toisella sivulla kirjoittaa tuon (textarean sisällön) koodi.txt tiedostoon ja sitten linkin tohon, joka readfile komennon perusteella (Päättelisin näin) lukee tuon koodi.txt tiedoston.
Käsitinkö oikein?
Kyllä.
Okei, eikun muokkaamaan!
Valmista tuli:
***omakoodi.php <form action="" method="POST"> <textarea name="koodibox" rows="15" cols="100"><?php $h = $_POST["koodibox"]; $h = htmlspecialchars($h); echo $h; ?></textarea> <br> <input type="submit" value="Muuta merkinnät"> <a href="download.php">Lataa koodi</a> </form> <?php //Poimitaan koodiboxin sisältö $koodi = $_POST["koodibox"]; //Korvataan < ja > $koodi = str_replace("<", "<", $koodi); $koodi = str_replace(">", ">", $koodi); //Poistetaan HTML merkkaus //$koodi = htmlspecialchars($koodi); //Korvataan vielä rivinvaihdot koodiboxissa <br> muotoon $koodi = str_replace("\n", "<br>\n", $koodi); //Merkit kirjoitetaan ylös: //Avataan $tiedosto = fopen("koodi.txt", "w"); //Kirjoitetaan fwrite($tiedosto, $koodi); //Suljetaan fclose($tiedosto); ?>
Ja download.php
***download.php <?php $tiedosto = "koodi.txt"; header("Content-Disposition: attachment; filename=\"" . basename($tiedosto) . "\""); header("Content-Length: " . filesize($tiedosto)); header("Content-Type: application/octet-stream;"); readfile($tiedosto); ?>
Kiitos kaikille avusta! Tuli taas opittua kaikenlaista kivaa PHP sähellystä :)
Tuossa ehditkin jo muokata viestiäsi, mutta buttonin joka toimii linkkinä saa seuraavasti:
<form method="link" action="sivu.html"> <input type="submit" value="Mene!" /> </form>
Tumettaja kirjoitti:
<form method="link" action="sivu.html">
Ei ole ainakaan minun tuntemissani HTML-versioissa sellaista kuin method="link", standardinmukaiset arvot ovat "get" ja "post". Näistä tietenkin "get" on oikea tuohon tilanteeseen.
<input type="button" onClick="document.location.href = 'sivu.html'" value="Mene!">
Niin methodia ei tarvitse laittaa lainkaan. Tämä on validia.
<html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> </head> <body> <form action="isosia.jpg"> <input type="submit" value="Mene!" /> </form> </body> </html>
https://www.php.net/htmlentities miksei tätä ole mainittu?
No, ratkasin tuon seuraavasti:
Laitoin kaksi eri formia, ja CSS laitoin:
form { display: inline; }
Samalla tuli hienompi, koska ne ovat samalla rivillä (Ilman inlineä ei ole)
ja buttoneita tietenkin
PS. Joo, niin muokkasin kun puhuin täyttä roskaa. Ehdin kirjoittaa ennen kuin ajatella. :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.