Functies voor speciale tekens toepassen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Raymond ---

Raymond ---

27/12/2006 11:49:00
Quote Anchor link
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)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
 
PHP hulp

PHP hulp

25/04/2024 22:45:21
 
D B

D B

27/12/2006 11:52:00
Quote Anchor link
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
 
Raymond ---

Raymond ---

27/12/2006 11:55:00
Quote Anchor link
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

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 ---
 
Jan Koehoorn

Jan Koehoorn

27/12/2006 11:55:00
Quote Anchor link
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.
 
Raymond ---

Raymond ---

27/12/2006 11:56:00
Quote Anchor link
Bedankt Jan,
nl2br moet dus bij het tonen, niet bij de invoer?
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
 
Raymond ---

Raymond ---

01/02/2007 17:52:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<input type="text" name="naam" size="30" value="Invoer">" />
//Terwijl het dit moet zijn:
<input type="text" name="naam" size="30" value="Invoer" />
 
Martijn Wieringa

Martijn Wieringa

01/02/2007 19:03:00
Quote Anchor link
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().
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }





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)
PHP script in nieuw venster Selecteer het PHP script
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
    // 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), "&euro;", $string);
            $string = str_replace(chr(153), "&trade;", $string);

            // Catch all other not converted characters.
            for($i = 128; $i < 160; $i++)
            {
                $string = str_replace(chr($i), "&#" . $i . ";", $string);
            }
        }
        else
        {
            $string = str_replace("&", "&amp;", $string);
            $string = str_replace("<", "&lt;", $string);
            $string = str_replace(">", "&gt;", $string);
            $string = str_replace("\"", "&quot;", $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)
PHP script in nieuw venster Selecteer het PHP script
1
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", "&nbsp;&nbsp;&nbsp;&nbsp;", $string);

        return $string;
    }



Bij Email (headers):
In de headers moeten quotjes, de enter en de carriage return worden escaped.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }


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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
    }
Gewijzigd op 01/01/1970 01:00:00 door Martijn Wieringa
 
Raymond ---

Raymond ---

01/02/2007 19:26:00
Quote Anchor link
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("\"", "&quot;", $string);
werkt...
 
Martijn Wieringa

Martijn Wieringa

01/02/2007 22:08:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$string = str_replace("&", "&amp;", $string);
$string = str_replace("<", "&lt;", $string);
$string = str_replace(">", "&gt;", $string);
$string = str_replace("\"", "&quot;", $string);


ofwel

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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), "&euro;", $string);
            $string = str_replace(chr(153), "&trade;", $string);

            // Catch all other not converted characters.
            for($i = 128; $i < 160; $i++)
            {

                $string = str_replace(chr($i), "&#" . $i . ";", $string);
            }
        }

        else
        {
            $string = str_replace("&", "&amp;", $string);
            $string = str_replace("<", "&lt;", $string);
            $string = str_replace(">", "&gt;", $string);
            $string = str_replace("\"", "&quot;", $string);
        }


        return $string;
    }


?>
 
Arjan Schuurman

Arjan Schuurman

01/02/2007 22:36:00
Quote Anchor link
:O So seg, jij bent op dreef Pholeron...
 
Martijn Wieringa

Martijn Wieringa

01/02/2007 22:43:00
Quote Anchor link
lol :P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.