qualitum logo
ÅÄÖ igen. Men det gäller sökresultat som inte visas

PHPportalen Forum Index » PHP Mjukstart
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget Gå till sida 1, 2  Nästa
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724094
Inlägg Skrivet: 2012-06-09 13:35      Ämne: ÅÄÖ igen. Men det gäller sökresultat som inte visas Citera

Hej!

Nybörjare som jag är både vad det gäller php och MySQL så har jag drabbats av problem med att sökningar med svenska tecken i en MySQL-databas inte ger några resultat. Så länge jag söker med bokstäverna a-z (och siffror) så går det bra men inte annars. Jag har sökt i forumet här (och på andra platser) men har i princip bara hittat information om att tecken inte visas korrekt, men problemet för min del är att jag inte får några sökresultat över huvud taget, trots att jag vet att de finns i databasen.

Jag har i möjligaste mån försökt se till att ha MySQL i utf8-format. Detta innebär att MySQL använder "teckenuppsättning: UTF-8 Unicode (utf8)" och att Kollation för MySQL anslutning är utf8_general_ci. Vidare är allting som rör själva databasen, alltså tabellstrukturen samt alla relevanta fält i tabellen, satt till utf8_general_ci (under Kollationering). Fast det kanske kan ha uppstått några teckenproblem redan då jag kopierade och klistrade in ord och fraser till databasen i PHPMyAdmin?

Nu har jag även konverterat och sparat alla relevanta php-filer, dock inte alla som ingår i hela sajten så att säga, i Notepad++ till UTF-8 (utan BOM) samt ändrat charset enligt
KOD:
1:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

inom head-taggen i min huvudfil som heter search.php.

Kopplingen till databasen har jag i en separat fil dbaseconnect.inc.php och där ser koden ut som följer
PHP:
1:
<?php
2:
mysql_connect('localhost''root''mittlösenord');
3:
mysql_select_db('test');
4:
mysql_query"SET NAMES utf8");
5:
mysql_query"SET CHARACTER SET utf8"); 
6:
?>

Jag har lagt till de två avslutande mysql-query-raderna jämfört med hur det såg ut från början.

Med hjälp av dessa ändringar och konverteringar har jag nått dithän att sökresultaten visas med svenska tecken, t ex ögon istället för �gon. Jag kan dock fortfarande inte söka på ordet ögon. Inget resultat av sökningen trots att ordet finns med och ser "svenskt" ut i själva databasen när jag kollar i PHPMyAdmin. På sidan står det dock "Din sökning efter ögon gav inga resultat" vilket väl borde betyda att sidan inte skickar iväg rätt bokstäver till MySQL?

Tacksam för svar eller synpunkter. Smile

- SethP
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724104
Inlägg Skrivet: 2012-06-09 23:12      Ämne: Citera

Har du kollat alla delar i kedjan:
* HTML-koden ( <meta charset="utf-8" /> eller <meta http-equiv="content-type" content="text/html; charset=utf-8" /> )
* PHP-filerna (UTF-8 utan BOM)
* Databasuppkopplingen (SET NAMES, SET CHARACTER SET eller eventuellt mysql_set_charset)
* Databaserna (COLLATION och CHARSET)
* Databastabellerna (COLLATION och CHARSET)
* Innehållet i databastabellerna

Att döma utifrån den info du uppger, så skulle jag rösta på den sista punkten. Du skriver att databasen, tabellerna och uppkopplingen är utf-8, och alla filer är utf-8. Då kvarstår sista punkten, alltså den data som är inlagd i databasen.
Om den är inlagd som Latin1 (Iso-8859-1) men läses som utf-8 (�gon), samma sak om datan är i latin1 och du söker med utf-8 så kommer det inte funka.
När du skriver att det står "Din sökning efter ögon...", var kommer den variabeln ifrån? Kommer den från en variabel i php? Kan det vara så att du använder utf8_encode någonstans? Alternativt htmlentities?
Eller kommer den utskriften från databasen?
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724106
Inlägg Skrivet: 2012-06-10 00:11      Ämne: Citera

Tack för ditt svar, marabou! Smile
Nu funkar sökningarna som jag hade tänkt mig, fast jag måste kolla upp lite mer om varför?

Precis som du skriver så hade jag redan kontrollerat och ändrat det mesta som gäller att databasen och alla kopplingar är satta till utf-8, så det var nog inte riktigt det som var problemet. Däremot hade jag htmlentities med i php-koden som en sorts säkerhetsgrej för att folk inte ska kunna skriva in html-kod och fippla med sidan, så att säga.

PHP:
1:
 $keywords mysql_real_escape_string(htmlentities(trim($_POST['keywords']))); 

Så såg det ut innan, men jag provade alltså med att ta bort htmlentities som så här:
PHP:
1:
 $keywords mysql_real_escape_string(trim($_POST['keywords'])); 

.. och då funkar det! Äntligen. utf8_encode använder jag förresten ingenstans.

Jag förstår dock inte riktigt varför det plötsligt funkar, nybörjare som jag är, men jag ska studera det som står på htmlentities lite i morgon. Egentligen vill jag (kanske) ha med htmlentities i koden, fast nu presenteras ju åtminstone resultat från databasen på min sida när jag söker på t ex ögon.

- SethP

Edit:
Skummade sidan på php.net lite snabbt och vad jag förstår ska man kunna specificera lite mera exakt hur htmlentities ska fungera eller vad som ska "konverteras" så att säga?


Edit2:
Jag tog bort markeringen för rätt svar på marabous inlägg eftersom det löser en del av mitt problem. Det visade sig dock vara något av en fusklösning, eller vad man ska välja att kalla det?

Söker jag t ex på ordet ögon, som i exemplet jag givit tidigare, så behandlas söksträngen som både ögon och ogon. Skulle jag ha t ex författarnamnet Eugen Kogon med i databasen så skulle det representera en träff och visas i resultatlistan. Men så vill jag inte ha det. Endast relevanta träffar (med å ä och ö till exempel) ska visas.

Jag funderar på om det kan vara som du, marabou, skriver att data är inlagd i databasen med något annat teckenformat, eller annan teckenuppsättning, från början? För trots att jag har ändrat i phpMyAdmin till utf8 på allt så fanns det här med i sql-filen jag läste in från början:
KOD:
1:
CREATE TABLE IF NOT EXISTS `testtabell` (
2:
  `id` int(11) NOT NULL,
3:
  `titel` varchar(200) NOT NULL,
4:
  `forfattare` varchar(200) NOT NULL,
5:
  `text` varchar(200) NOT NULL,
6:
  `keywords` varchar(450) NOT NULL,
7:
  PRIMARY KEY (`id`)
8:
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

SQL-kommandot här är något redigerad, men det är CHARSET=latin1 på slutet som gör mig lite konfunderad? Trots att jag alltså har ändrat manuellt i phpMyAdmin till utf8?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724111
Inlägget är accepterad som det rätta svaret Skrivet: 2012-06-10 11:49      Ämne: Citera

Ändra utf8_general_ci till utf8_swedish_ci så ska den hantera åäö som egna bokstäver (i slutet av alfabetet). utf8_general_ci tolkar åä som varationer av a, och ö som variant av o och därför får du sökningar på ögon att matcha Kogon. Dessutom sorterar utf8_general_ci å och ä direkt efter a (alltså före b), t.ex. Adam, Åre, Äpple, Banan, Citron medan utf8_swedish_ci sorterar som vi är "vana" vid".

htmlentities är för att konvertera så mycket som möjligt till html-entiteter, t.ex. < blir &lt ;, & blir &amp ;, Å blir &Aring ; Ã blir &Atilde ; och ¶ blir&para ;
PHP jobbar internt med Latin1 så när du kör htmlentities tolkar php din sträng som latin1 och kodar html-tecken därefter. Bokstaven ö i utf-8 består av tecknen ö i latin1, och när htmlentities kommer till dessa tecken kodas de till &Atilde ;&para ; vilket definitivt kommer visas som ö oavsett vilken teckenkodning som används.
Om man använder teckenkodningar bra (som du gör) så behövs inte htmlentities. För att skydda mot html-kod i input kan du använda htmlspecialchars istället. Den kodar de speciella html-tecknen <, >, & osv. och lämnar bokstäver som de är (vilket gör att webbläsaren kan läsa dem normalt)
Dessutom skall du bara använda htmlspecialchars (och/eller htmlentities) vid utskrift, inte vid input. Vid input är det bara mysql_real_escape_string som gäller.

Vill du ändå använda htmlentities (rekommenderas inte) så är det tredje argumentet $charset där du kan ställa att det skall tolkas som utf-8:
KOD:
1:
htmlentities("<b>Räksmörgås</b>", ENT_QUOTES, 'UTF-8');
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724121
Inlägg Skrivet: 2012-06-10 17:10      Ämne: Citera

Takk you so mycket, marabou! Laughing

I think it's wörking just fint nu.
Jag ändrade alla utf8_general_ci i databasen till utf8_swedish_ci. Och så tog jag bort htmlentities ifrån söksidan (tills vidare i alla fall). Nu fungerar det precis som tänkt.

Stort tack för hjälpen än en gång alltså. Exclamation

- SethP

PS:
Vad det gäller htmlentities så har jag lite att kolla upp lite noggrannare framöver. (Man lär så länge man lever, förhoppningsvis.)
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724123
Inlägg Skrivet: 2012-06-10 17:17      Ämne: Citera

SethP skrev:
... Och så tog jag bort htmlentities ifrån söksidan (tills vidare i alla fall). Nu fungerar det precis som tänkt.
...
Vad det gäller htmlentities så har jag lite att kolla upp lite nogrannare framöver. (Man lär så länge man lever, förhoppningsvis.)

Det korta svaret: Använd htmlspecialchars istället för htmlentities, vid utskrift av data som kan ha kommit från användare (T.ex. data från databasen, configfiler, formulär-input (sökruta) mm)

Nu för tiden är htmlentities inte längre nödvändig för att hantera bokstäver. Det enda den används för är (som du skrev i ditt första inlägg) att skydda mot elak html-kod, och det gör htmlspecialchars lika bra (bättre?)
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724124
Inlägg Skrivet: 2012-06-10 17:23      Ämne: Citera

Lite nybörjare (eller lat) som jag är... Skulle du kanske kunna ge något kodexempel på hur man bör (?) skriva in htmlspecialchars, särskilt om det bara ska gälla vid utskrift av data? Vart bör koden i så fall placeras? Jag gissar på någonstans i foreach-satsen (kanske)? Eller i echo?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
PaulMcShit



Medlem i: 567 dagar

Status: Offline



#724126
Inlägg Skrivet: 2012-06-10 20:06      Ämne: Citera

SethP skrev:
Lite nybörjare (eller lat) som jag är... Skulle du kanske kunna ge något kodexempel på hur man bör (?) skriva in htmlspecialchars, särskilt om det bara ska gälla vid utskrift av data? Vart bör koden i så fall placeras? Jag gissar på någonstans i foreach-satsen (kanske)? Eller i echo?


Du skriver echo htmlspecialchars($variablen_du_vill_skriva_ut);
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724134
Inlägg Skrivet: 2012-06-10 22:11      Ämne: Citera

Om du idag har följande kod:
KOD:
1:
<p>Namn: <?php echo $row['namn']; ?></p>

eller
KOD:
1:
<?php
2:
  echo "<p>Epost: " . $_POST['epost'] . "</p>";

eller
KOD:
1:
<strong><?php echo "Din ip är $ip"; ?></strong>


Så blir de med htmlspecialchars:
KOD:
1:
<p>Namn: <?php echo htmlspecialchars($row['namn']); ?></p>

eller
KOD:
1:
<?php
2:
  echo "<p>Epost: " . htmlspecialchars($_POST['epost']) . "</p>";

eller
KOD:
1:
<strong><?php echo "Din ip är " . htmlspecialchars($ip); ?></strong>



Att tänka på är att htmlspecialchars skyddar din html-kod och skall endast användas vid utskrift (när du använder echo eller print eller nåt liknande som lägger in värden i html-koden)
Du skall inte behandla input med htmlspecialchars vid inmatning.
När du lägger in data i en sql-fråga (för att skicka till mysql, antingen en INSERT INTO, UPDATE eller SELECT) skall du använda mysql_real_Escape_string eller liknande (t.ex. PDO::prepare)
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724145
Inlägg Skrivet: 2012-06-11 11:18      Ämne: Citera

Jag sitter och spekulerar lite om det egentligen är nödvändigt att använda något skydd mot att löst folk kanske provar att skriva in html-kod i text-/sökfältet. Vad kan egentligen gå snett? Som jag tänker, i min lilla värld, kan den "lösa personen" ifråga i så fall bara ändra hur resultatfönstret ser ut för hans eller hennes egen del, väl?

Skyddet mot eventuella SQL-inserts finns dock kvar i min kod hoppas jag, i och med mysql_real_escape_string, så att "löst" folk inte ska kunna fibbla med den superviktiga databasen?

Kanske bäst att jag klistrar in min kod som den ser ut (på't ungefär)?

Först koden som finns med på själva söksidan, och som även visar sökresultaten:
PHP:
1:
<?php include 'function.inc.php'?>
2:
[...]
3:
 
4:
<?php
5:
   if (isset($_POST['keywords'])) {
6:
      $suffix "";   // denna rad tar tillsammans med rad 24 och 26 bort bokstaven s ur
7:
                  // ordet "hits" i räknaren av sökresultatet om det bara är en post
8:
      $keywords mysql_real_escape_string(trim($_POST['keywords']));
9:
      
10:
      $errors = array();
11:
      
12:
      if (empty($keywords)) {
13:
         $errors[] = '<p class="smaller">Please write something to search for.</p>';
14:
      }   else if (strlen($keywords)<2) {
15:
         $errors[] = '<p class="smaller">Your search term must be at least two characters long.</p>';
16:
      }   else if (search_results($keywords) === false) {
17:
         $errors[] = '<p class="smaller">Your search for <strong>'.$keywords.'</strong> gave no results.</p>';
18:
      }
19:
      
20:
      if (empty($errors)) {
21:
         $results search_results($keywords);
22:
         $results_num count($results);
23:
         
24:
         $suffix = ($results_num !=1) ? 's' '';
25:
         
26:
         echo '<p class="smaller">Your search for <strong>'$keywords'</strong>
27:
         gave <strong>'$results_num'</strong> hit'$suffix'.</p>';
28:
         
29:
         foreach($results as $result) {
30:
            echo '<p><br />Name: <strong>'$result['fname'], ' '$result['sname'], '</strong><br />
31:
            Phone: '$result['phone'], '<br />
32:
            E-mail: <a href="mailto:'$result['email'], '">'$result['email'], '</a><br />
33:
            Position: '$result['position'], '<br />
34:
            Homepage: <a href="'$result['url'], '" target="_blank">'$result['url'], '</a><br /></p>';
35:
         }
36:
         
37:
      }   else {
38:
         foreach($errors as $error) {
39:
            echo $error'<br />';
40:
         }
41:
      }
42:
      
43:
   }
44:
?>
(Observera att rad 26 och 27 egentligen är samma, alltså 26.)

Sedan koden för själva funktionen:
PHP:
1:
<?php
2:
include 'dbaseCon.inc.php';
3:
 
4:
function search_results($keywords) {
5:
   $returned_results = array();
6:
   $where "";
7:
   
8:
   $keywords preg_split('/[\s`]+/'$keywords);
9:
   $total_keywords count($keywords);
10:
   
11:
   foreach($keywords as $key=>$keyword) {
12:
      $where .= "`keywords` LIKE '%$keyword%'";
13:
      if ($key != ($total_keywords 1)) {
14:
         $where .= " AND ";
15:
      }
16:
   }
17:
   
18:
   $results "SELECT `fname`, `sname`, `phone`, `email`, `position`, `url` FROM `employees` WHERE $where";
19:
   $results_num = ($results mysql_query($results)) ? mysql_num_rows($results) : 0;
20:
   
21:
   if ($results_num === 0) {
22:
      return false;
23:
   }   else {
24:
      
25:
      while ($results_row mysql_fetch_assoc ($results)) {
26:
         $returned_results[] = array(
27:
                        'fname' => $results_row['fname'],
28:
                        'sname' => $results_row['sname'],
29:
                        'phone' => $results_row['phone'],
30:
                        'email' => $results_row['email'],
31:
                        'position' => $results_row['position'],
32:
                        'url' => $results_row['url']
33:
         );
34:
      }
35:
      
36:
      return $returned_results;
37:
      
38:
   }
39:
   
40:
}
41:
?>


Som synes har jag utmatning av eventuella felmeddelanden eller sökresultat (inkl. räknare) på söksidan, den översta kodsnutten. Är det då meningen att man ska putta in htmlspecialchars på två ställen eller kanske till och med tre?

Jag ursäktar om min frågeställning är lite väl amatörmässig, men det beror i så fall bara på att jag precis har börjat med det här med php och MySQL.

PS:
Vågar jag förresten passa på att fråga om det finns något relativt enkelt sätt att i ovanstående kod söka i flera olika fält (kolumner) istället för fältet keywords och därmed kunna skippa det (keywords) helt och hållet?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724146
Inlägg Skrivet: 2012-06-11 13:07      Ämne: Citera

Jag ser att du här använder mysql_real_escape_string direkt på variabeln $keywords. mysql_real_escape_string skall du bara använda på det som går in i en sql-fråga, och inte på sådant som du skriver ut. Har du använt mysql_real_Escape_String på en variabel så får du inte modifiera den sen. Då motverkar du syftet. Jag tycker du skall flytta mysql_real_Escape_String-anropet till search_results eftersom du där splittar strängen (och då kan teoretiskt motverka skyddet)

Lägg mysql_real_escape_string precis innan du lägger in ett värde i sql-strängen:
PHP:
11:
    foreach($keywords as $key=>$keyword) {
12:
      $keyword mysql_real_escape_string($keyword);
13:
      $where .= "`keywords` LIKE '%$keyword%'";
14:
    } 


Sen lägger du till htmlspecialchars runt värden när du skriver ut dem:
(detta är ett skydd mot html-kod, det är inte helt nödvändigt men det är bra att ha som rutin)
PHP:
29:
          foreach($results as $result) {
30:
            echo '<p><br />Name: <strong>'htmlspecialchars($result['fname']), ' 'htmlspecialchars($result['sname']), '</strong><br />
31:
            Phone: 'htmlspecialchars($result['phone']), '<br />
32:
            E-mail: <a href="mailto:'htmlspecialchars($result['email']), '">'htmlspecialchars($result['email']), '</a><br />
33:
            Position: 'htmlspecialchars($result['position']), '<br />
34:
            Homepage: <a href="'htmlspecialchars($result['url']), '" target="_blank">'htmlspecialchars($result['url']), '</a><br /></p>';
35:
         


Din rad 26 (där du skriver ut keywords) bör också innehålla htmlspecialchars:
PHP:
26:
          echo '<p class="smaller">Your search for <strong>'htmlspecialchars($keywords), '</strong>' 


OBS! Det viktigaste är att skydda mot sql-injektioner, och det skall göras på värdena precis innan de går in i sql-frågan. Har du escapeat ett värde så får du inte manipulera det sen, utan att escapea igen (och då kan det bli "dubbel-escapeat" så undvik det.



EDIT: Att söka i flera kolumner istället för keywords gör du ungefär på samma sätt som du nu söker efter flera keywords, men gör en sökning på varje kolumn
PHP:
1:
    foreach($keywords as $key=>$keyword) {
2:
      $keyword mysql_real_escape_string($keyword);
3:
      $where .= "(`fname` LIKE '%$keyword%' OR
4:
              `sname` LIKE '%$keyword%' OR
5:
              `phone` LIKE '%$keyword%' OR
6:
              `email` LIKE '%$keyword%' OR
7:
              `position` LIKE '%$keyword%' OR
8:
              `url` LIKE '%$keyword%')";
9:
      if ($key != ($total_keywords 1)) {
10:
         $where .= " AND ";
11:
      }
12:
   
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724147
Inlägg Skrivet: 2012-06-11 13:23      Ämne: Citera

[onödig post]

Senast ändrad av SethP den 2012-06-13 12:33, ändrad totalt 1 gång
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724217
Inlägg Skrivet: 2012-06-13 12:23      Ämne: Citera

Tack igen, marabou! Very Happy

Jag höll nästan på att skriva ett inlägg här om att det inte funkar, men det gör det ju! Jag hade missat dollartecknen i ditt exempel för sökning ur flera kolumner. Och så blev jag lite ställd över att det inte presenterades något felmeddelande... Men så är det nog med oss nybörjare; att vi missar en del väsentligheter (faktiskt). Jag vet att php- och sql-språk inte alls är samma sak. Därav inga felmeddelanden när det är fel i sql-kommandona.


Nu har jag i vilket fall som helst tagit till mig dina förslag vad det gäller htmlentities, som jag har skippat helt och hållet liksom htmlspecialchars. Däremot har jag ändrat plats på mysql_real_escape_string så som du föreslår, och det verkar som att allt nu fungerar ypperligt! Thanx!

- SethP
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
marabou
Moderator



Medlem i: 3149 dagar
Från: Sveriges framsida
Status: Offline



#724221
Inlägg Skrivet: 2012-06-13 13:49      Ämne: Citera

Du bör felsöka dina sql-frågor också.
Ta för vana att spara din sql-sträng i en egen variabel (t.ex. $sql) och använd sedan
KOD:
1:
$results = mysql_query($sql) or die(sprintf("<p>Error: %s</p><pre>SQL: %s</pre>", mysql_error(), $sql));

Eller kortare (utan sql-frågan)
KOD:
1:
$results = mysql_query($sql) or die(mysql_error());


Just det där med "or die" gör att du direkt får upp om det blev nåt fel med din sql. mysql_error talar om vad som blev fel, och för att göra det lätt att felsöka, skriv även ut sql-frågan som den skickas till databasen (min första kod i detta inlägg).

Som du förstått är det viktigare att skydda sig mot sql-injektioner än mot html-injektioner (även XSS = Cross site scripting) eftersom html/xss inte kan (normalt) få samma förödande konsekvenser. Jag har för vana att använda htmlspecialchars när det är textdata från användaren när jag inte validerat på annat sätt. Det är framförallt viktigt när du skriver ut attribut i html-koden, för då är det inte skydd, utan nödvändigt för att html-koden skall bli korrekt.
Jag har t.ex. gjort ett bildarkiv där användare själva kunde ladda upp bilder och skriva bildtexter. Det visade sig att "Vissa Bildtexter syns inte!!!", och det var för att jag missat htmlspecialchars på "alt"-attributen och där användarna använt "-tecken:
KOD:
1:
<img src="$filename" title="$bildtext" alt="$bildtext" />

En bild med bildtexten Min "livstavla" gav då följande kod:
KOD:
1:
<img src="bild.jpg" title="Min " livstavla"" alt="Min "livstavla"" />
och då blev det ju helt galet. htmlspecialchars var det som krävdes i detta fall.
Ursäkta OffTopic! Rolling Eyes
 

_________________
"Never argue with stupid people. They will bring you down to their level and beat you with experience."
- Mark Twain
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
SethP



Medlem i: 345 dagar
Från: V:a Götaland
Status: Offline



#724224
Inlägg Skrivet: 2012-06-13 16:46      Ämne: Citera

marabou skrev:
Du bör felsöka dina sql-frågor också. [...]

Ursäkta OffTopic! Rolling Eyes

Tack för tipsen. OT eller ej så tar jag tacksamt emot dem. Smile

- SethP
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget Gå till sida 1, 2  Nästa
PHPportalen Forum Index » PHP Mjukstart
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic
qualitum logo