Avatar billede encorez Nybegynder
21. juli 2009 - 12:32 Der er 11 kommentarer og
1 løsning

Problem med htmlspecial chars

Hej
Jeg har gemt nogle RSS feeds fra nettet i en SQL database. Før jeg gemmer dem i DB konvertere jeg koden sådan

$description =  htmlspecialchars("$description", ENT_QUOTES);

Problemet kommer når jeg skal trække dem ud og vise dem på min side. Jeg bruger en mouse-over funktion fra Erik Bosrup hvis I kender det.

Koden til mouse over ser sådan ud
onmouseover="return overlib('<?=$description?>', CAPTION, '<?=$title?>');" onmouseout="return nd();"

Dvs. der må sikkert ikke komme en apostrof inde i description da det jo ødelægger ' '.
Jeg har prøvet frem og tilbage med htmlspecialchars_decode samt jeg har prøvet denne
$fjern     = array("\r","\n","'");
$description = str_replace($fjern, "", $description);

Men det er som om der er noget jeg overser for det er ikke ved alle at denne mouseover virker og jeg kan ikke gennemskue hvorfor.

Så hvordan vil I mene er den korrekt måde at vise koden fra DB på min side så jeg kan bruge inde i ' '.

Håber det er forståeligt.

Mvh. Simon
Avatar billede repox Seniormester
21. juli 2009 - 12:39 #1
str_replace("'", "/'", $description); ?
Avatar billede encorez Nybegynder
21. juli 2009 - 13:11 #2
Hmmm, jeg har vist fundet noget der virker.

repox - din virker ikke umiddelbart fordi jeg har jo brugt htmlspecialchars inden jeg gemte koden så apostrof ' er lavet til &#039;
Desuden skal det så ikke være \' istedet for /' ?  Men du fik mig til at byggede videre på den jeg havde i forvejen.

Af en eller anden årsag skal jeg også fjerne \r og \n eller er der nogle af dem der ikke virker

Så nu ser min koden sådan ud. og virker som sagt umiddelbart på alt hvor det skal

$fjern     = array("\r","\n");
$description = str_replace($fjern, "", $description);
$fjern     = array("'", "&#039;");
$description = str_replace($fjern, "\'", $description);

Hvis nogen skal simplificer dette ville det være lækkert. Jeg fatter ikke hvorfor jeg skal fjerne \r og \n.
Avatar billede repox Seniormester
21. juli 2009 - 13:18 #3
Jo, jeg tror jeg fik drukket lidt af natpotten, selvfølgelig skal det være \.

Jeg kan ikke svare dig på hvorfor du skal fjerne \r og \n, men umiddelbart virker det som om du fra starten gør noget som påvirker dit indhold.

Er der nogen særlig grund til at du vælger at bruge htmlspecialchars()?
Avatar billede encorez Nybegynder
23. juli 2009 - 09:59 #4
Jeg tror jeg bruger htmlspecialchars() inden jeg læser koden ind i databasen for at undgå at apostrofer og html-tags laver problemer.

Mener du ikke det er nødvendigt? Burde jeg bare sætte det direkte ind i databasen uden videre konvertering.
Avatar billede repox Seniormester
23. juli 2009 - 10:06 #5
Nej, men mysql har en funktion til at undgå de problemer du omtaler.
http://php.net/mysql_real_escape_string (og til dem som er med på moden: http://php.net/mysqli_real_escape_string )

Den sørger for at alle ubehageligheder ikke vil skabe problemer for din database.

Når du så trækker indholdet ud, vil du få indholdet uden konverteringen som du har problemer med nu.
Avatar billede encorez Nybegynder
26. juli 2009 - 17:10 #6
Hej
Jeg har nu tømt databasen og indlæser nu data sådan
$description =  mysql_real_escape_string($item['description']);

Bagefter skal jeg læse dem ud og skrive ind i denne
<a href="" onmouseover="return overlib('<?=$description?>', CAPTION, '<?=$title?>');">Et link</a>

Description og en titel skal altså skrive ud i mellem to apostroffer og det det kan jeg ikke få det at lykkes efter mere end 2 timers forsøg.
Jeg har prøvet med adskille funktioner og fjernet apostroffer og addslashes osv, men intet virker 100%.

Nogen forslag?
Avatar billede repox Seniormester
26. juli 2009 - 17:19 #7
Prøv med addslashes()

<a href="" onmouseover="return overlib('<?=addslashes($description)?>', CAPTION, '<?=addslashes($title)?>');">Et link</a>
Avatar billede encorez Nybegynder
26. juli 2009 - 18:51 #8
Det virker ikke kun med addslashes. Andre forslag?

Det skal jo bruges til et script i en mouse over. Måske er der andre tegn der giver problemer som " og html-tags. Jeg ved det ikke
Avatar billede encorez Nybegynder
26. juli 2009 - 20:37 #9
Nu virker det men det var opstændigt og heldigt.
1. Fjern "\r","\n"
2. htmlspecialchars($title, ENT_QUOTES);
3. Erstat ("'", "&#039;") med \'

Jeg forstår ikke der skal alt det til men det må have noget med det script at gøre som skal vise den mouse over.

Læg point for hjælpen
Avatar billede encorez Nybegynder
27. juli 2009 - 19:55 #10
Læg et svar for din hjælp repox :)
Avatar billede encorez Nybegynder
28. august 2009 - 17:03 #11
Repox, læg et svar for din hjælp please :)
Avatar billede encorez Nybegynder
03. september 2009 - 22:17 #12
Så må jeg tage pointene selv. Men tak for hjælpen :)
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