Eli kommentointipätkässäni kirjoittaja kirjoittaa esim.
Moi! ihan "kivat" sivut sulla.. ;)
Tämä kirjautuu tiedostoon: Moi! ihan \"kivat\" sivut sulla.. ;)
Olen joskus muistaakseni tämän ohittanut, muttei muistu keinot mieleen, joku nopeasti muistuttaisi?
Kts.
Jos et noita kenoviivoja itse lisännyt, niin käytössäsi on PHP:n magic quotes ominaisuus. Idea siinä on, että jos tallennat tietoja johonkin tietokantaan, pitää lainausmerkit (ja muut tietokannan erikoismerkit) "escapettaa" tallennuksen yhteydessä.
Jos tallennat esim SQL kantaan tekstiä "Terve, olen "JTS"", niin tuolla tavallahan nuo lainausmerkit menevät sekaisin, kuten näkyy. Silloin muotona pitää olla "Terve, olen \"JTS\"", jolloin teksti tallentuu kantaan ilman noita kenoviivoja.
Mutta koska et käytä tietokantaa jossa tällä olisi väliä, niin ominaisuus on sinulle turha (mielestäni koko ominaisuus on turhaa holhousta, joka aiheuttaa enemmän ongelmia ja sekaannuksia kuin se korjaa). Sen saa pois käytöstä monilla eri tavoilla. Yksi vaihtoehto on .htaccess:
http://wiki.mureakuha.com/wiki/.htaccess (kohta Magic Quotes).
Yksi vaihtoehto on ajaa käyttäjän syötteet PHP:n stripslashes funktion lävitse, mikä poistaa Magic Quotesin laittamat kenoviivat. Toisaalta tuo ei tunnista että onko MQ päällä, joten jos se ei ole päällä, ja ajat stripslashes-funktiota, niin sitten taas käyttäjän syötteet tallentuvat kantaan väärin.
$a="Moi! ihan \"kivat\" sivut sulla.. ;)"; echo $stripslashes($a);
Kyse on magic_quotes_gpc-asetuksesta, joka lisää lennosta escapetukset Get, Post ja Cookie -dataan. Laita asetus pois päältä tai käytä stripslashes():ia
Oho, olinpas taas hidas...
Strip.. Ja mä kun etin koko php.netin läpi kaiken maailman, replace, html, borrowing mark.. :)
Kiitos molemmille vastauksista, luulenpa, että kyseinen MQ on käytössä O_o Ainakin tuo auttoi.. ;D
Kyllähän tuo replacellakin olisi onnistunut:
echo(str_replace("\\\"", "\"", "Markku \"Uusis\" Uusipaavalniemi"));
siirappi kirjoitti:
Kyllähän tuo replacellakin olisi onnistunut:
echo(str_replace("\\\"", "\"", "Markku \"Uusis\" Uusipaavalniemi"));
Eikös tuon pitäisi mennä näin:
echo(str_replace("\\"", "\"", "Markku \\"Uusis\\" Uusipaavalniemi"));
Jos kommentti on muuttujassa $kommentti , niin ylimääräiset kenoviivat saa stripslashes() -funkytiolla poistettua näin:
$kommentti = stripslashes($kommentti);
Tää tarkistaa, onko magicquotes-asetus päällä, ja jos on, ottaa turhat kenoviivat pois.
if (ini_get('magic_quotes_gpc')) { $kommentti = stripslashes($kommentti); }
Ja tässä on myös vastaava funktioituna. smart_addslashesia on hyvä käyttää kantaan lisätessä, ja tuota smart_stripslashesia vaikka tässä tapauksessa:
<?php function smart_addslashes($array) { if (get_magic_quotes_gpc() == true) return $array; else { if (is_string($array)) return addslashes($array); elseif (is_array($array)) { foreach ($array as $key => $value) $newarray[$key] = smart_addslashes($value); return $newarray; } } } function smart_stripslashes($array) { if (get_magic_quotes_gpc() == false) return $array; else { if (is_string($array)) return stripslashes($array); elseif (is_array($array)) { foreach ($array as $key => $value) $newarray[$key] = smart_stripslashes($value); return $newarray; } } } ?>
Tuolla pitäisi voida vetäistä myös kokonaisia taulukoita, vaikka $_POST- taulukon haluamaansa muotoon. En ole ihan varma onko tämä melkein suora kopio manuaalista, vaiko itsekö tuon väsäsin. No, tuskinpa sillä edes niin väliä onkaan.
Sitten olisi seuraavaa kysymystä vielä.
Saako rivinvaihtoja korvattua <br> tagilla mitenkään. Eli esim jos lomakkeen tekstikenttään kirjoittaa:
"Moi!
44v poikamies 190/100 etsii 20v vaaleata naista."
Niin tämä saataisiin muotoon:
"Moi!<br><br>44v poikamies 190/100 etsii 20v vaaleata naista."
<?php $teksti = $_POST['teksti']; $teksti = str_replace("\n","<br>"); ?>
_muistaakseni_ meni tollain?
Pieni korjaus:
$teksti = str_replace("\n","<br/>", $teksti);
Mistä tuo "<br/>":n kenoviiva muuten tulee? Itse en tajunnut tuollaista mistään edes etsiä?
Toimii kyllä siis, kiitos jälleen.
_Kauttaviiva_ tulee tägin sulkemisen merkiksi, BR tägillä ei ole omaa sulkutägiä, joten tägi suljetaan samassa tägissä.
vert.
<a href="foobar.html" title="foobar">foobar</a>
<a name="ankkuri" /> (! huomaa puuttuva sulkutägi, jonka takia tägin sulkeminen tehdään saman tägin sisällä)
chiqu kirjoitti:
Mistä tuo "<br/>":n kenoviiva muuten tulee?
XHTML-speksistä: http://www.w3.org/TR/xhtml1/#h-4.6
https://www.ohjelmointiputka.net/oppaat/opas.
JTS kirjoitti:
Pieni korjaus:
$teksti = str_replace("\n","<br/>", $teksti);
PHP:ssä on tähän oma funktio, nl2br.
https://www.php.net/nl2br
<?php // Käyttö: $teksti = nl2br("Ohjelmointiputka\n does it"); echo $teksti; // Tulostaa: Ohjelmointiputka<br/> does it ?>
Tontsa-san kirjoitti:
// Tulostaa: Ohjelmointiputka<br/> does it
nl2br lisää br-tagin rivinvaihdon kohdalle, ei korvaa sitä.
Tulostus olisi siis Ohjelmointiputka<br/>\n does it
Jos rivinvaihdot haluaa korvata toimii vaikkapa str_replace(array("\r\n", "\r", "\n"), '<br />', $teksti)
Aihe on jo aika vanha, joten et voi enää vastata siihen.