Avatar billede martin_shearer Nybegynder
23. marts 2014 - 11:15 Der er 21 kommentarer og
1 løsning

fjern html ved import ?

Hej
jeg har denne kode, til at hente noget data fra rss feed. men hvordan gør man så den ikke henter alle muligt html tegn med ned ?
har forsøgt med denne kode, men kan ik rigtigt få det til at virker.

--

jeg bruger denne kode
    mysql_set_charset('utf8');
   
    foreach($xml->channel->item as $item)
    {
   
    mysql_query("INSERT INTO rss (id, title, description, comments, pubdate, image, link, datotid)
    VALUES (
        '',
        '".mysql_real_escape_string($item->title)."',
        '".mysql_real_escape_string($item->description=htmlspecialchars(trim($item->description)))."',
        '".mysql_real_escape_string($item->comments)."',
        '".mysql_real_escape_string($item->pubDate)."',   
        '".mysql_real_escape_string($item->image)."',   
        '".mysql_real_escape_string($item->link)."',
        NOW()

hvordan kan det være min description. ikke sortere alle html tegn fra, og bare henter rent tekst ?

jeg får ting som dette:
imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-TQcC1ibRvXI/UytHNrgnI4I/AAAAAAAABxA/

altså i stedet for fx " burde den vil gemme det som " i stedet for ?
er det ikke det, som dette betyder ? description=htmlspecialchars
Avatar billede Slater Ekspert
23. marts 2014 - 12:05 #1
htmlspecialchars laver netop " om til "

Det bør dog ikke betyde noget, for " bliver renderet som " i en browser. Hvis du ser det som " når dataene udskrives igen, er det fordi det er blevet encoded to gange - altså allerede var encoded før du kørte funktionen på det.

Du kan også bare udelade "$item->description=". Der er ikke nogen grund til at assigne til en variabel, når du bare bruger returværdien direkte.
Avatar billede Slater Ekspert
23. marts 2014 - 12:06 #2
- Og det fik jeg ikke sagt, hvis du vil fjerne html fra en tekst, kan du bruge strip_tags().
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 13:04 #3
hvad er bedst at bruge, hvis jeg henter fra 2 forskellige rss feed. og de er på hver sin måde når jeg henter.

altså den ene skriver  " og den anden laver "

eller kan der fikses med den kode der viser det data der er hentet ?
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 13:07 #4
vil det sige

  '".mysql_real_escape_string($item->description=htmlspecialchars(trim($item->description)))."',

skal ændres til

  '".mysql_real_escape_string($item->description=htmlspecialchars(strip($item->description)))."',
Avatar billede Slater Ekspert
23. marts 2014 - 14:05 #5
>>"hvad er bedst at bruge, hvis jeg henter fra 2 forskellige rss feed. og de er på hver sin måde når jeg henter."

Så vidt jeg ved, er der ingen indbygget funktionalitet i PHP til at HTML-encode en streng kun hvis den ikke allerede er det. Det er du nødt til selv at tjekke for, hvis du vil have funktionaliteten.

Til gengæld er der ikke rigtig nogen grund til at gøre det. Du bruger mysql_real_escape_string, som renser strengen for ting, der kan bruges til at lave injections, og det er det vigtigste. Resten kan du bare lade være som det er. Både " og " giver som sagt det samme, når du viser det i HTML senere.


Mht. den linje skal den ændres til

'".mysql_real_escape_string(strip_tags($item->description))."',
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 14:12 #6
jeg fandt ud af det tak :D

kan du smide et svar :D

kan du ik lige fortælle, hvorfor virker dette ik ?

if  ($row['image'] != "") AND ($row['link'] != "%testtest%")
giver denne fejl,
Parse error: syntax error, unexpected T_LOGICAL_AND
Avatar billede Slater Ekspert
23. marts 2014 - 14:18 #7
Dine parenteser passer ikke sammen. Du afslutter if-sætningen efter ($row['image'] != ""), og dit "AND" står derfor udenfor den.

Egentlig skal du bare fjerne den parentes-slut før "AND" og den parentes-start efter "AND".
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 14:22 #8
tAK
Det prøvede jeg lige, men det løst ik mit problem. måske du kender den korrekte løsning. Den er lidt indviklet.

jeg skal bruge noget ala det er

if  ($row['image'] != "" AND $row['link'] != "%bil%")  {
                        echo "<img src='" . ($row['image']) . "'>";
                    } else {
                        echo "<img src='/nopic.png'>\n";
                    }

altså den skal tjek image. hvis der er data i det felt skal den vise det. Men er det felt tomt. skal den tjekker om felter link indeholder noget med %bil% gør den der, skal den vise det. Men indeholder det ik noget med bil, skal den vise
echo "<img src='/nopic.png'>\n";

hvordan gøres det korrekt ?
Avatar billede Slater Ekspert
23. marts 2014 - 14:45 #9
Du kan ikke tjekke om en streng indeholder noget med % i PHP. Det er kun i SQL det virker.

Når det er så simpelt som her vil det nemmeste være at bruge funktionen strpos i PHP. Den returnerer positionen af en streng i en anden streng, eller 'false' hvis den ikke findes.

if ($row['image'] != '' && strpos($row['link']) !== false)
Avatar billede Slater Ekspert
23. marts 2014 - 14:46 #10
Hov, der glemte jeg andet parameter - beklager. Sådan er det når man ikke tester.

if ($row['image'] != '' && strpos($row['link'], 'bil') !== false)

Sådan der. Så tjekker den for tilstedeværelsen af "bil".
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 14:49 #11
men tjekker den sidste af din kode. alle 3 ting ?

den her kode
if  ($row['image'] != "" AND $row['link'] != "%bil%")  {
                        echo "<img src='" . ($row['image']) . "'>";
                    } else {
                        echo "<img src='/nopic.png'>\n";
                    }

virker fint nok. den tjekker bare kun 2 af tingene. Derfor jeg eftersøger en anden løsning. da den ik virker med den sidste ting ?
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 14:52 #12
men din kode

if ($row['image'] != '' && strpos($row['link'], 'bil') !== false)


Får jeg nemlig vis nopic.png selvom image indeholde data. så det er jo forkert.

altså den skal tjek image. hvis der er data i det felt skal den vise det.
Men er det felt tomt. skal den derefter tjekker om felter link indeholder noget med %bil% MENS feltet image stadig er tomt, indeholde link noget med %bil% , skal den vise det.
Men indeholder det ik noget med bil, og image også er tomt, skal den vise
echo "<img src='/nopic.png'>\n";
Avatar billede Slater Ekspert
23. marts 2014 - 15:35 #13
>>"den her kode virker fint nok"

Det gør den altså ikke. Du kan ikke bruge % som wildcard i PHP.


Men beklager, jeg har vist ikke helt forstået hvad du ville. Er det sådan at $row['image'] kan indeholde en billedsti, og den skal vises hvis den eksisterer? Og hvis 'image' IKKE findes, så skal den i stedet tjekke om 'link' indeholder strengen 'bil'?

I så fald:


if ($row['image']) {
    $src = $row['image'];
}
else {
    if (strpos($row['link'], 'bil') !== false) {
        $src = $row['link'];
    }
    else {
        $src = 'nopic.jpg';
    }
}

echo '<img src="'. $src . '">';
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 16:11 #14
Men beklager, jeg har vist ikke helt forstået hvad du ville. Er det sådan at $row['image'] kan indeholde en billedsti, og den skal vises hvis den eksisterer?  JA

Og hvis 'image' IKKE findes, så skal den i stedet tjekke om 'link' indeholder strengen 'bil'? ja.

og hvis den gør det. så viser den bil.

men hvis image ikke indeholder noget og link ligeledes er tom, skal den bare vise nopic.

men den kode du har postet. viser stadig nopic. selvom link, indeholder noget.
Avatar billede Slater Ekspert
23. marts 2014 - 16:26 #15
Den viser link hvis link indeholder noget, der indeholder strengen "bil". Skal den vise noget andet, hvis link indeholder noget, der IKKE indeholder "bil"?
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 16:37 #16
som du kan se, her får jeg stadig vis begge to

http://awesomescreenshot.com/0982j8os89

i dette tilfælde står der noget i link, så den første 'billede fjel' burde slet ik være der
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 16:41 #17
det er fint. den viser det, hvis link indeholde bil. så skal den jo vise det, som er i link. men forstår ik den så stadig viser det tegn, som et billede fejl ?
Avatar billede martin_shearer Nybegynder
23. marts 2014 - 17:09 #18
Den viser link hvis link indeholder noget, der indeholder strengen "bil". Skal den vise noget andet, hvis link indeholder noget, der IKKE indeholder "bil"?

Yep. når der ik er noget i image. tjekker den fint nok link, hvis link så indeholder: bil

skal den vise det.

Men hvis både image er tom og link ikke indeholde bil, skal den bare vise nopic :)

håber den var nemmere at forstå.
Avatar billede Slater Ekspert
24. marts 2014 - 07:44 #19
>>"Men hvis både image er tom og link ikke indeholde bil, skal den bare vise nopic"

- Det gør den også med den kode, jeg smed før. Hvad er det den gør forkert?
Avatar billede martin_shearer Nybegynder
24. marts 2014 - 07:56 #20
som du kan se på billedet. så viser den stadig den lille fejl, men at der er et billede.

måske er det fordi at hvis link indeholde bil. skal den ikke vise resultat i et

echo '<img src=" tag. men bare alm.

det skal kun vises i img tag, hvis image inde holder data og nopic i image tag.
Avatar billede Slater Ekspert
24. marts 2014 - 08:00 #21
Ah, okay - jeg troede det hele var billeder.

Jamen så flytter du bare udskrivningen af billedet op.

if ($row['image']) {
    echo '<img src="'. $row['image']; . '">';
}
else {
    if (strpos($row['link'], 'bil') !== false) {
        echo $row['link'];
    }
    else {
        echo '<img src="nopic.jpg">';
    }
}

- Hvis 'link' slet ikke skal vises, kan du bare fjerne den echo.
Avatar billede martin_shearer Nybegynder
24. marts 2014 - 08:26 #22
takkk. Virkede uden echo link ;)
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

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