Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: str_replace ja <br>-tagi

Sivun loppuun

Rocceri [07.04.2009 15:39:41]

#

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("<", "&lt;", $koodi);
$koodi = str_replace(">", "&gt;", $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 &lt; ja &gt; 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: &lt;html&gt;
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: &lt;html&gt; &lt;head&gt; jne.., kun sen pitäisi tulostua (Jos siis on kirjoitettu <html> (rivinvaihto) <head>):
&lt;html&gt;
&lt;head&gt;

Grez [07.04.2009 15:50:57]

#

Rocceri kirjoitti:

Koodi tulostuu näin:

&lt;html&gt; &lt;head&gt;

kun sen pitäisi tulostua näin:

&lt;html&gt;
&lt;head&gt;

No laitat tuohon ennen echo $koodi -kohtaa että

$koodi=str_replace("\n", "<br />\n", $koodi);

Rocceri [07.04.2009 16:03:02]

#

Mahtavaa Grez, kiitos!

kayttaja-2791 [07.04.2009 16:05:05]

#

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

Rocceri [07.04.2009 16:33:02]

#

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.

tsuriga [07.04.2009 17:53:35]

#

Saisi. Onnea harjoitteluun!

Rocceri [07.04.2009 18:14:52]

#

tsuriga kirjoitti:

Saisi. Onnea harjoitteluun!

Kiitosta vaan... Onko vinkkiä miten voisin tehdä sen? Ei ole hajuakaan, kuten varmaan arvasitkin.

Tumettaja [07.04.2009 18:27:36]

#

Tallennat html-koodin palvelimella .html tiedostoon, käsket selainta ladata tiedoston header funktiota käyttäen, ja sen jälkeen halutessasi tuhoat tiedoston.

kayttaja-2791 [07.04.2009 18:49:27]

#

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.

Rocceri [07.04.2009 19:03:43]

#

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?

Tumettaja [07.04.2009 19:10:11]

#

Pistät linkin viemään seuraavanlaiselle PHP-sivulle:

<?php
$tiedosto = "koodi.txt";

header("Content-Disposition: attachment; filename=\"" . basename($tiedosto) . "\"");
header("Content-Length: " . filesize($tiedosto));
header("Content-Type: application/octet-stream;");
readfile($tiedosto);
?>

Rocceri [07.04.2009 19:23:30]

#

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?

Tumettaja [07.04.2009 19:31:05]

#

Kyllä.

Rocceri [07.04.2009 19:44:08]

#

Okei, eikun muokkaamaan!

Rocceri [08.04.2009 15:14:14]

#

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("<", "&lt;", $koodi);
$koodi = str_replace(">", "&gt;", $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ä :)

Tumettaja [08.04.2009 15:39:44]

#

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>

Metabolix [08.04.2009 16:22:29]

#

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.

Juhko [08.04.2009 17:49:44]

#

<input type="button" onClick="document.location.href = 'sivu.html'" value="Mene!">

peg [08.04.2009 17:51:19]

#

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>

punppis [08.04.2009 17:51:57]

#

https://www.php.net/htmlentities miksei tätä ole mainittu?

Rocceri [08.04.2009 20:11:19]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta