Kjapp og trygg hosting for Wordpress

Problemer med å få vist tags

testdriver

Ha det bra..
Jeg bruker htmlspecialchars() på tur inn i databasen, men ønsker å kunne tillate tags slik at ting ser bra ut.

Hvis jeg nå legger inn:
PHP:
<h1>Overskrift</h1>
Jeg er <b>ikke tykk</b>.

..så får jeg det eksakt samme ut. Hvordan kan jeg løse dette på en sikker måte?
 

Keanu

Geek
Jeg har sett dette problemet før, så jeg tenkte å bidra med det i tillfellet dette er det samme. Noen bruker htmlspecialchars() på feil variabel, altså ikke den som blir sendt inn til databasen, men en kopi. Er du sikker på at du lagrer resultatet fra htmlspecialchars() i korrekt variabel?

Hvis ikke må jeg nok ha kode for å komme med bedre forslag.
 

testdriver

Ha det bra..
Takker for svar.

Pong: I utgangspunktet er det viktigste å tillate h3 og b. Å ta bort htmlspecialchars fikser vel problemet, men det vil vel ikke være spesielt sikkert. Går det an å tillate enkelte tags på et vis?

Tenkte egentlig å legge inn koden til youtube-filmer i databasen også etterhvert - hvordan gjør man sånt sikrest mulig? Jeg er helt blåst på dette, men er opptatt av sikkerheten.

Keanu: Ja, akkurat det er jeg sikker på.

:)
 

Pong

Jeg selger sʇɥƃıluʍop :)
Jeg har prøvd dette:

<?
header('Content-Type: text/plain');
$tmp = '<h1>Overskrift</h1>
Jeg er <b>ikke tykk</b>. ';
echo htmlspecialchars($tmp);
?>

Tror nok det peneste er å ta bort "alle" tags med script - sjekk gjerne strip_tags funksjonen (og så i tillegg kjøre htmlspecialchars)?
 
Hva med noe slikt?

PHP:
// Denne utvider du med så mange tags du bare vil (nb, bruk bare lowercase)
$godkjente_tags_array = array('b', 'strong', 'h1', 'h2', 'h3', 'p');

$string = $verdien_din; // som det allerede er kjørt htmlspecialchars på

$num = count($godkjente_tags_array);
for ($i = 0; $i < $num; $i++) {
$x = $godkjente_tags_array[$i];
$string = preg_replace('/&lt;(?:'.$x.'|'.strtoupper($x).')&gt;(.+)&lt;\/(?:'.$x.'|'.strtoupper($x).')&gt;/', '<'.$x.'>$1</'.$x.'>', $string);
}
 

Keanu

Geek
I utgangspunktet er det viktigste å tillate h3 og b. Å ta bort htmlspecialchars fikser vel problemet, men det vil vel ikke være spesielt sikkert. Går det an å tillate enkelte tags på et vis?

Ut fra dette tolker jeg at htmlspecialchars ikke er funksjonen du er ute etter. htmlspecialchars endrer spesialtegn som <, >, / og så videre til html entities, altså f.eks. < blir &lt; , slik at man får printa koden, f.eks. for en pastebin.

Det hører mer ut som du er ute etter strip_tags. For å tillatte f.eks. h3 og b, brukes strip_tags($text, '<h3><b>').
 
Jeg foretrekker htmlspecialchars eller htmlentities foran strip_tags når som helst. Jeg vil at dersom en av brukerne mine plutselig skulle bestemme seg for å skrive «Hva skjer om jeg gjør <b>sånn</b>?», skal output i nettleseren være «Hva skjer om jeg gjør <b>sånn</b>?» og ikke «Hva skjer om jeg gjør sånn?» Kan ikke huske sist jeg faktisk brukte strip_tags til noe nyttig.
 

testdriver

Ha det bra..
Hei folkens! Takk for alle svarene. Beklager så utrolig sen tilbakemelding (personlige grunner).

Jeg valgte å gå for olafmoriarty sitt forslag, og det fungerte strålende! Dette var veldig behjelpelig. Takker!

(Ryktepoeng til hele gjengen)
 
Topp