Sikring av input fra form og karaktersett UTF-8

goran298
goran298s bilde
Avlogget
BidragsyterDonator
Ble med: 31.03.2010

Driver å prøver meg på et enkelt CMS sak her...

I filen som registreringskjemaet henviser til så har jeg denne koden:

<?php
$firstname
= $_GET['firstname'];
$lastname = $_GET['lastname'];
echo
'Welcome to our web site, ' .
htmlspecialchars($firstname) . ' ' .
htmlspecialchars($lastname, ENT_QUOTES, 'UTF-8') . '!';
?>

dersom jeg endrer htmlspecialchars($firstnam2) . ' ' . til htmlspecialchars($firstname, ENT_QUOTES, 'UTF-8') . ' ' .  så vil ikke resultatet bli vist dersom jeg skriver noe med æ, ø eller å. Er dette fordi jeg har med ENT_QUOTES, 'UTF-8'? og er det noen som vet hvilket tegnsett jeg må referere til dersom jeg skal ha med ikke bare æ, ø og å men også andre bokstaver som er spesielle i andre språk?

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Karaktersett og UTF-8

Hmmm, dette var merkelig. UTF-8 er det beste tegnsettet. Hvis du ser på tegnsettet på Hjemmeside.org, så ser du at dette er UTF-8. Dette gjøres fra webserveren, samt. at informasjon i databasen er lagret som UTF-8.

Når du bruker charset-argumentet (UTF-8) i htmlentities() eller, slik du gjør, i htmlspecialchars(), så sier du i prinsippet at data du putter inn i funksjonen for formatering er UTF-8.

Hvis data ikke er UTF-8, så vil funksjonen gi deg en tom string. Dette er altså problemet. For at skriptet ditt skal fungere kan du velge å fjerne UTF-8-formateringen, eller du må være konsistent på valg av karaktersett.

Dette fungerer, dog uten UTF-8.

<?php
$firstname
= $_GET['firstname'];
$lastname = $_GET['lastname'];
echo
'Welcome to our web site, ' .
htmlspecialchars($firstname) . ' ' .
htmlspecialchars($lastname, ENT_QUOTES) . '!';
?>

Hvis vi vil nytte UTF-8, så kan det gjøres slik:

<?php
// Sender data som UTF-8
header('Content-type: text/html; charset=utf-8');

// Konverterer GET til UTF-8
$firstname = utf8_encode($_GET['firstname']);
$lastname = utf8_encode($_GET['lastname']);

// Sender output
echo 'Welcome to our web site, ' .
htmlspecialchars($firstname, ENT_QUOTES, 'UTF-8') . ' ' .
htmlspecialchars($lastname, ENT_QUOTES, 'UTF-8') . '!';
?>

Man trenger forøvrig ikke å ha linjen

<?php
header
('Content-type: text/html; charset=utf-8');
?>

i alle script, da man kan stille inn dette i webserveren (som oftest ved hjelp av .htaccess).

Til slutt: Er det noen spesiell grunn til at du bruker htmlspecialchars() fremfor htmlentities()?

goran298
goran298s bilde
Avlogget
BidragsyterDonator
Ble med: 31.03.2010
takker

takker og bukker for svar :)

grunnen til at jeg burker htmlspecialchars er ganske enkelt fordi den boka jeg driver å leser samtidig som jeg koder eksemplene som blir brukt i boka, så er formålet her i denne delen å hindre at noen kan trikse med addressefeltet i nettleseren med å putte inn andre koder. Altså dette som går på sikkerhet og hva skal jeg kalle det på norsk.... innsprøyting...

uansett formålet her her bare dersom noen finner på å skrive inn f.eks <b> og </b> så skal den bare putte dette ut på siden uten at tekst eller script endrer seg og/eller i oppførsel.

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Fjerne HTML tagger med PHP

Ser den, men htmlentities() har samme funksjonalitet, og faktisk bedre t.o.m. Du bør også sjekke ut funksjonen strip_tags() - veldig hendig til dette formålet, da den ikke bare konverterer til insprøytet kode til <b>dette skulle vært tykk tekst</b>, men faktisk fjerner taggene.

F.eks;

<?php
$var
= '<b>Tykk skrift</b>';

// Gjør om spesialtegn
print htmlentities($var);
# <b>Tykk skrift</b>

// Fjerner HTML
print strip_tags($var);
# Tykk skrift
?>
?>

Som du ser fjerner strip_tags() (PHP-manualen) også markup. Du kan også bestemme hvilke tagger som skal være lov med denne funksjonen, for eksempel hvis du vil at folk skal kunne skrive tykk skrift og sånt. Da vil den tillate de taggene, mens andre fjernes.

Hvilken bok leser du, og er du fornøyd så langt?

goran298
goran298s bilde
Avlogget
BidragsyterDonator
Ble med: 31.03.2010
hadde det i bakhodet

hadde det i bakohodet at det helt sikkert var andre og bedre måter å gjøre dette på, og nå vet jeg i allefall 3 måter å gjøre det på :)

Boka jeg leser heter: Build Your Own Database Driven Web Site Using PHP & MySQL, 4th Edition og kan finnes her.

Dette er den første boka jeg har finne som starter med et kode eksempel som følges gjennom hele boka. Ikke slik som mange bøker gjør at dem først tar et eksempel på bruk av kode for så å hoppe til noe annet, selv om man lærer det samme så syns jeg det er mye enklere med å begynne med en liten kode man bygger videre på. Så ja jeg er meget fornøyd så langt. Eneste var at jeg trodde jeg kunne det som var i de første kappitlene og tok en snarvei litt ut i boka :P men nå er jeg tilbake på de første sidene hehe.

Fordelen jeg har av denne boka er at jeg lettere klarer å se sammenhengen og kan linke dette opp direkte til mitt mål, så ja boka anbefales.

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Takk for tipset

Kjempemessig, og takk for tipset. Blir stadig spurt om god litteratur, så dette skal jeg bringe videre når neste anledning byr seg.

Kjenner til hopping, ja. Gjorde det i matematikk en gang og jeg måtte også rykke tilbake til start, haha.

goran298
goran298s bilde
Avlogget
BidragsyterDonator
Ble med: 31.03.2010
Hvordan...

hvordan gjør du det for å putte koden inn i den ramma med farger?

Tenkte jeg skulle putte ut en sånn passe lang sak.... men jeg får det ikke til å bli så fint og oversiktlig slik du gjør....

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Syntax highlighting i WYSIWYG editoren

Sorry for tregt svar, men jeg jobber med saken. Dette er nemlig lettere sagt enn gjort. Har planlagt å få impementert dette i WYSIWYG-editoren lenge, men ikke funnet tiden til det.

Grunnen til at jeg får det til, er fordi jeg legger det inn manuelt. Denne muligheten er det kun meg som har nå, men jeg skal få ordnet syntax highlighting av kode i WYSIWYG-editoren så snart som mulig. Prøver meg frem as we speak.

Inntil da kan du godt paste koden direkte inn, så kan jeg gå inn og redigere posten din slik at den blir stylet som kode etterpå. Jeg kommer til å skrive en ny post i denne tråden når funksjonaliteten er i orden, samt. en kort guide i hvordan man bruker den under foraet for tilbakemeldinger og kunngjøringer.

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.