Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Pieni PHP-ongelma

Sivun loppuun

chiqu [27.09.2006 15:17:11]

#

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.

kayttaja-2791 [27.09.2006 15:33:46]

#

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.

InvalidCo [27.09.2006 15:35:15]

#

$a="Moi! ihan \"kivat\" sivut sulla.. ;)";
echo $stripslashes($a);

https://www.php.net/manual/fi/function.stripslashes.php

ajv [27.09.2006 15:36:08]

#

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...

chiqu [27.09.2006 15:38:09]

#

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

siirappi [27.09.2006 15:50:07]

#

Kyllähän tuo replacellakin olisi onnistunut:

echo(str_replace("\\\"", "\"", "Markku \"Uusis\" Uusipaavalniemi"));

kayttaja-2791 [27.09.2006 16:09:33]

#

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"));

Tontttu [01.10.2006 15:01:16]

#

Jos kommentti on muuttujassa $kommentti , niin ylimääräiset kenoviivat saa stripslashes() -funkytiolla poistettua näin:

$kommentti = stripslashes($kommentti);

Cornix [05.10.2006 12:27:29]

#

Tää tarkistaa, onko magicquotes-asetus päällä, ja jos on, ottaa turhat kenoviivat pois.

if (ini_get('magic_quotes_gpc')) {
    $kommentti = stripslashes($kommentti);
}

kayttaja-2791 [05.10.2006 13:17:52]

#

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.

chiqu [05.10.2006 16:25:20]

#

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."

Quirzo [05.10.2006 16:53:13]

#

<?php
$teksti = $_POST['teksti'];
$teksti = str_replace("\n","<br>");
?>

_muistaakseni_ meni tollain?

kayttaja-2791 [05.10.2006 16:54:02]

#

Pieni korjaus:

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

chiqu [05.10.2006 17:00:35]

#

Mistä tuo "<br/>":n kenoviiva muuten tulee? Itse en tajunnut tuollaista mistään edes etsiä?

Toimii kyllä siis, kiitos jälleen.

Lebe80 [05.10.2006 17:08:47]

#

_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ä)

Blaze [05.10.2006 17:09:17]

#

chiqu kirjoitti:

Mistä tuo "<br/>":n kenoviiva muuten tulee?

XHTML-speksistä: http://www.w3.org/TR/xhtml1/#h-4.6

temu92 [05.10.2006 17:43:49]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=xhtml Täälläkin on opas joka hieman johdattelee XHTML:n käyttöön.

Tontsa-san [25.10.2006 12:54:23]

#

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
?>

Blaze [25.10.2006 14:00:06]

#

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)


Sivun alkuun

Vastaus

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

Tietoa sivustosta