Functies voor speciale tekens toepassen
Ik ben nu bezig met een systeem. Maar de data die de database uit (of in?) gaat moet natuurlijk omgezet worden zodat de speciale tekens worden omgezet.
Ik dacht te weten welke functies ik daar voor nodig had, maar ik zie nu steeds meer ook andere functies die je daar voor zou kunnen gebruiken. Oftewel: Ik zie door de bomen het bos niet meer.
Ik heb het dus over dit soort functies:
htmlentities
htmlspecialchars
nl2br
ED -> Zijn er nog meer?
Mijn vraag is dus:
Welke functies en op welke plek moet ik ze gebruiken?
Hier even de structuur van mijn pagina's: (zodat je evt. kan vertellen welke functie(s) bij welke pagina)
Ik dacht te weten welke functies ik daar voor nodig had, maar ik zie nu steeds meer ook andere functies die je daar voor zou kunnen gebruiken. Oftewel: Ik zie door de bomen het bos niet meer.
Ik heb het dus over dit soort functies:
htmlentities
htmlspecialchars
nl2br
ED -> Zijn er nog meer?
Mijn vraag is dus:
Welke functies en op welke plek moet ik ze gebruiken?
Hier even de structuur van mijn pagina's: (zodat je evt. kan vertellen welke functie(s) bij welke pagina)
Code (php)
1
2
3
4
5
2
3
4
5
+ add.php //Voert data in de db
+ view.php //Geeft een overzocht van alle data
+ details.php //Geeft een overzicht van een specifiek ID
+ delete.php //Verwidjerd de data uit de db
+ edit.php //wijzigd de data uit de db
+ view.php //Geeft een overzocht van alle data
+ details.php //Geeft een overzicht van een specifiek ID
+ delete.php //Verwidjerd de data uit de db
+ edit.php //wijzigd de data uit de db
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Gesponsorde koppelingen:
nl2br: Zet nl(New Line) om naar <br>
Oftewel als je een textarea met een enter erin geeft zet hij daar vanzelf een <br> in...
De rest weet ik zo ook niet :P
Maar daarvoor php.net:
http://nl2.php.net/manual/nl/function.htmlentities.php
http://nl2.php.net/manual/nl/function.htmlspecialchars.php
http://nl2.php.net/manual/nl/function.nl2br.php
Oftewel als je een textarea met een enter erin geeft zet hij daar vanzelf een <br> in...
De rest weet ik zo ook niet :P
Maar daarvoor php.net:
http://nl2.php.net/manual/nl/function.htmlentities.php
http://nl2.php.net/manual/nl/function.htmlspecialchars.php
http://nl2.php.net/manual/nl/function.nl2br.php
Bierens schreef op 27.12.2006 11:52:
nl2br: Zet nl(New Line) om naar <br>
Oftewel als je een textarea met een enter erin geeft zet hij daar vanzelf een <br> in...
De rest weet ik zo ook niet :P
Maar daarvoor php.net:
http://nl2.php.net/manual/nl/function.htmlentities.php
http://nl2.php.net/manual/nl/function.htmlspecialchars.php
http://nl2.php.net/manual/nl/function.nl2br.php
Oftewel als je een textarea met een enter erin geeft zet hij daar vanzelf een <br> in...
De rest weet ik zo ook niet :P
Maar daarvoor php.net:
http://nl2.php.net/manual/nl/function.htmlentities.php
http://nl2.php.net/manual/nl/function.htmlspecialchars.php
http://nl2.php.net/manual/nl/function.nl2br.php
Ik denk dat je mij niet helemaal begrijpt. Ik had die 3 als voorbeeld gegeven.
mijn vraag was dus: of er nog meer zijn, en waar ik die 3 + evt. andere moet toepassen.
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Bij dataopslag probeer je altijd zo min mogelijk zooi mee te nemen.
Bij het opslaan moeten bepaalde tekens natuurlijk wel geëscapet worden. Gebruik daarvoor mysql_real_escape_string.
Bij het tonen van gegevens kan het zijn dat je sommige tekens even om moet zetten. Dan gebruik je htmlentities.
Verwacht je regeleindes te zien, maar zie je die niet, gebruik dan nl2br.
Bij het opslaan moeten bepaalde tekens natuurlijk wel geëscapet worden. Gebruik daarvoor mysql_real_escape_string.
Bij het tonen van gegevens kan het zijn dat je sommige tekens even om moet zetten. Dan gebruik je htmlentities.
Verwacht je regeleindes te zien, maar zie je die niet, gebruik dan nl2br.
Bedankt Jan,
nl2br moet dus bij het tonen, niet bij de invoer?
nl2br moet dus bij het tonen, niet bij de invoer?
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Topic ia al een beetje uit, maar ik kwam op een probleem wat ik net zo goed hier kan posten.
Ik heb dus:
mysql_real_escape_string($_POST['naam']);
Werkt prima, maar als ik in het veld naam "> invoer dat gaat het helemaal mis. Hoe kan ik dat dus oplossen?
Het zo dan worden:
Ik heb dus:
mysql_real_escape_string($_POST['naam']);
Werkt prima, maar als ik in het veld naam "> invoer dat gaat het helemaal mis. Hoe kan ik dat dus oplossen?
Het zo dan worden:
Bij het uitlezen van waarden uit de database moet je er van uit gaan dat deze 'vuil' is. Gezien er via omwegen altijd 'vieze' data in de database geschreven kan worden buiten jou applicaties om.
Daarom moet je op een aantal zaken letten:
Bij queries: Escapen van waarden; de single quotes en slashes. Kan m.b.v. de functie mysql_real_escape_string().
Bij html: Als het veld niet mag mengen met je HTML, moet je i.i.g. de html-chars escapen (quote, kleiner-dan, groter-dan en ampersand).
Kan met htmlentities(), maar die parsed ook andere karakters. Dat laatste kan op sommige browsers problemen geven als je bijv. data laad als waarde van een textarea, textfield, select e.d.
Wil je bij teksten dat wél enters zichtbaar worden, kun je ná het escapen de enter vervangen voor de html-equavalent <br> met bijv. de functies htmlentities() en nl2br().
Bij Email (headers):
In de headers moeten quotjes, de enter en de carriage return worden escaped.
Bij URLs:
Waarden in de parameters van de URL escapen, zoals de & en = teken. Kun je eenvoudig doen met urlencode()
Bij Javascript:
Genereerd je dynamish javascript, dan slashes, quotes, enters, carriage return.
Daarom moet je op een aantal zaken letten:
Bij queries: Escapen van waarden; de single quotes en slashes. Kan m.b.v. de functie mysql_real_escape_string().
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
// Use this function to ensure user input is save to use in SQL statements.
function escapeSql($string)
{
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("'", "\'", $string);
return $string;
}
function escapeSql($string)
{
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("'", "\'", $string);
return $string;
}
Bij html: Als het veld niet mag mengen met je HTML, moet je i.i.g. de html-chars escapen (quote, kleiner-dan, groter-dan en ampersand).
Kan met htmlentities(), maar die parsed ook andere karakters. Dat laatste kan op sommige browsers problemen geven als je bijv. data laad als waarde van een textarea, textfield, select e.d.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Escape HTML characters from a string
function escapeHtml($string, $ascii_save = false)
{
if($ascii_save)
{
$string = htmlentities($string);
// Catch not converted characters.
$string = str_replace(chr(128), "€", $string);
$string = str_replace(chr(153), "™", $string);
// Catch all other not converted characters.
for($i = 128; $i < 160; $i++)
{
$string = str_replace(chr($i), "&#" . $i . ";", $string);
}
}
else
{
$string = str_replace("&", "&", $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
}
return $string;
}
function escapeHtml($string, $ascii_save = false)
{
if($ascii_save)
{
$string = htmlentities($string);
// Catch not converted characters.
$string = str_replace(chr(128), "€", $string);
$string = str_replace(chr(153), "™", $string);
// Catch all other not converted characters.
for($i = 128; $i < 160; $i++)
{
$string = str_replace(chr($i), "&#" . $i . ";", $string);
}
}
else
{
$string = str_replace("&", "&", $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
}
return $string;
}
Wil je bij teksten dat wél enters zichtbaar worden, kun je ná het escapen de enter vervangen voor de html-equavalent <br> met bijv. de functies htmlentities() en nl2br().
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Change plain string to HTML code.
function stringToHtml($string)
{
// HTML syntax
$string = escapeHtml($string, true);
// Fix new lines
$string = str_replace("\r\n", "<br />", $string);
$string = str_replace("\n", "<br />", $string);
$string = str_replace("\r", "<br />", $string);
// Fix Tabs
$string = str_replace("\t", " ", $string);
return $string;
}
function stringToHtml($string)
{
// HTML syntax
$string = escapeHtml($string, true);
// Fix new lines
$string = str_replace("\r\n", "<br />", $string);
$string = str_replace("\n", "<br />", $string);
$string = str_replace("\r", "<br />", $string);
// Fix Tabs
$string = str_replace("\t", " ", $string);
return $string;
}
Bij Email (headers):
In de headers moeten quotjes, de enter en de carriage return worden escaped.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
/*
voorkom dat de tekst een header kan bevatten, door enters te verwijderen,
en quotes en slashes te escapen.
*/
function escapeMailHeaders($string)
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes
return $string;
}
voorkom dat de tekst een header kan bevatten, door enters te verwijderen,
en quotes en slashes te escapen.
*/
function escapeMailHeaders($string)
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes
return $string;
}
Bij URLs:
Waarden in de parameters van de URL escapen, zoals de & en = teken. Kun je eenvoudig doen met urlencode()
Bij Javascript:
Genereerd je dynamish javascript, dan slashes, quotes, enters, carriage return.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
// Slashes special characters in a javascript lines; used for dynamic 'onclick, onload, onmouseover, onmouseout' events.
function escapeJavascript($string)
{
// Slash syntax
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("'", "\'", $string);
// Slash newline/return
$string = str_replace("\r\n", "\\n", $string);
$string = str_replace("\n", "\\n", $string);
$string = str_replace("\r", "\\n", $string);
return $string;
}
function escapeJavascript($string)
{
// Slash syntax
$string = str_replace("\\", "\\\\", $string);
$string = str_replace("'", "\'", $string);
// Slash newline/return
$string = str_replace("\r\n", "\\n", $string);
$string = str_replace("\n", "\\n", $string);
$string = str_replace("\r", "\\n", $string);
return $string;
}
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
Wow, nu vat ik het even niet meer. Het gaat om het geval HTML. Ik wil niet alles escapen met htmlententies() want dat ziet er niet uit met editen van de code. Volgens mij hoeft alleen " te worden geescaped. Want die zorgt er voor dat de HTML wordt afgesloten. Ik ga nu even kijken of
$string = str_replace("\"", """, $string);
werkt...
$string = str_replace("\"", """, $string);
werkt...
Als je alleen het meest noodzakelijke wilt escapen, en daarbij wil voorkomen dat er HTML code onbedoeld wordt ingevoegd vanuit de database/user input, dan is dit voldoende:
ofwel
Code (php)
1
2
3
4
2
3
4
$string = str_replace("&", "&", $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
ofwel
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$input = 'Mijn input met <br> html code en <p> veel meer <b>andere</b> onzin.';
echo escapeHtml($input, FALSE);
// Escape HTML characters from a string
function escapeHtml($string, $ascii_save = false)
{
if($ascii_save)
{
$string = htmlentities($string);
// Catch not converted characters.
$string = str_replace(chr(128), "€", $string);
$string = str_replace(chr(153), "™", $string);
// Catch all other not converted characters.
for($i = 128; $i < 160; $i++)
{
$string = str_replace(chr($i), "&#" . $i . ";", $string);
}
}
else
{
$string = str_replace("&", "&", $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
}
return $string;
}
?>
$input = 'Mijn input met <br> html code en <p> veel meer <b>andere</b> onzin.';
echo escapeHtml($input, FALSE);
// Escape HTML characters from a string
function escapeHtml($string, $ascii_save = false)
{
if($ascii_save)
{
$string = htmlentities($string);
// Catch not converted characters.
$string = str_replace(chr(128), "€", $string);
$string = str_replace(chr(153), "™", $string);
// Catch all other not converted characters.
for($i = 128; $i < 160; $i++)
{
$string = str_replace(chr($i), "&#" . $i . ";", $string);
}
}
else
{
$string = str_replace("&", "&", $string);
$string = str_replace("<", "<", $string);
$string = str_replace(">", ">", $string);
$string = str_replace("\"", """, $string);
}
return $string;
}
?>
:O So seg, jij bent op dreef Pholeron...
lol :P



