Avatar billede nemlig Professor
18. august 2010 - 20:44 Der er 5 kommentarer og
1 løsning

& vises forkert i PDF-dok, som er genereret med FPDF.

Hejsa.
Jeg anvender PHP-scriptet "www.fpdf.org" til at danne PDF-dokumenter.

Jeg har det problem, at når jeg fx. gemmer denne tekst i MySQL:

"Borde & Stole"

Så smider jeg inputtet igennem funktionen mysql_real_escape_string() og derved gemmes i MySQL:

"Borde & Stole".

Når jeg udskriver på skærmen, ser det fint ud, men når jeg danner PDF-dokumentet, så står der

"Borde & Stole".
Avatar billede keysersoze Ekspert
18. august 2010 - 21:02 #1
& er en HTML-entitet og virker derfor kun i et miljø, der kan fortolke HTML - du bør derfor sørge for at opbevare dine data rå, dvs med specialtegn, og så kun encode det når det skal ud i et miljø der kræver det.
Avatar billede nemlig Professor
18. august 2010 - 21:19 #2
Øv!  Nu er der gemt en del data i MySQl.

Måske jeg så kan løse det med denne funktionen, når jeg har hentet fra MySQL:

str_replace('&','&',$row['tekst']);

eller

er det en anden funktion, hvis den skal udskifte alle forekomster af & med &
Avatar billede keysersoze Ekspert
18. august 2010 - 21:42 #3
Jeg er desværre ikke inde i PHP så kan ikke give et svar - men mit gæt vil være at der også er andre tegn der replaces, fx æøå, så det bliver nok en større omgang replace der skal til.
Avatar billede nemlig Professor
18. august 2010 - 22:10 #4
Jeg tror faktisk at det er løst nu med str_replace.

Jeg har også smidt inputfelterne igennem htmlspecialchars(), hvilket er årsagen til problemet. Det giver ikke problemer med æøå, men kan selvfølgelig give problemer med andre special-tegn.

Lige nu er problemet løst, men løsningen er ikke perfekt. Jeg vil nok styre det med lidt begrænsning i anvendelse af specialtegn og så anvende str_replace på de tilladte tegn.

Alternativt kan jeg anvende nogle tegnfunktioner i fpdf-scriptet. Jeg kan fx. replace med Chr(38).

Tak for dine input - specielt det sidste som fik mig på sporet af problemet.

Sendt et svar.
Avatar billede nemlig Professor
18. august 2010 - 22:26 #5
Løsningen er at anvende htmlspecialchars_decode() som konverterer tilbage igen.
Avatar billede keysersoze Ekspert
19. august 2010 - 18:31 #6
så lægger jeg lige et svar :)

Det er helt korrekt tænkt at man skal passe på input fra brugeren når der skal gemmes i databasen - gør man ikke det risikerer man at stå med et sql injection problem, men det kan heldigvis gøres på andre måder end det du gør. I mange webløsninger opdager man aldrig den fejl du i mine øjne står i da indholdet i databasen kun bruges på web - men pludselig en dag står man og skal benytte data et andet sted og så har man lidt et problem hvis man har håndteret data forkert.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester