[PHP] Link zuiveren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi iedereen,
Heb een scriptje gemaakt in php die ervoor moet zorgen dat een ingevoerde link met
"http://" begint en niet eindigd met een "/" (want het gaat om een link naar een map).

heb het volgende gemaakt:
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
<?php 
$tekst = $_POST['text'];
if ($tekst == "")
{
    ?>
    <form id="FormName" action="test.php" method="post" name="FormName">
    <input type="text" name="text" size="24">
    <input type="submit" name="submitButtonName">
    </form>
    <?
}
else 
{
    $n = strlen($tekst); //tel het aantal letters
    $p = strrpos($tekst, '/'); //positie van laatste slash 
    if ($n == $p + 1) //als slash laatste positie is dan
    {
        $tekst = substr ($tekst, 0, $p); //nieuwe string zonder laatste "letter"
    }
    $h = strpos($tekst, "w"); //geeft eerste positie van letter w aan. ga er nu vanuit dat dat www is
    if ($h == "0") //als de w op de eerst plaats staat, dan staat er dus geen http voor
    {
    $tekst = "http://$tekst";
    }
    echo "nieuwe string zonder slash met http is nu: $tekst";   
}
?>


Opzich werkt dit prima, denk alleen dat het veel makkelijker kan, kon het alleen nergens vinden. Ook is het nogal foutgevoelig denk ik. Weet iemand hoe ik dit beter kan maken?

mijn dank

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Ik denk dat je dit beter met een Regular Expression kan doen.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

regular expressions?

btw... als ik nu intyp: google.com/blabla/ gaat het niet goed ;)

edit: je kan ook gebruik maken van $tekst[0] om het eerste karakter te checken dus:
PHP:
1
2
3
if($tekst[0] != "h") {
 $tekst = "http://" . $tekst;
}

[ Voor 48% gewijzigd door Verwijderd op 06-12-2006 15:17 ]


Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:56

Cyphax

Moderator LNX
Dat kan wel makkelijker ja. :+
Probeer eens een substring van de eerste 7 karakters te matchen op "http://"
Lukt dat: mooi. Lukt dat niet: doe er wat mee.
Verder kun je natuurlijk het een en ander wel verkorten:
code:
1
2
3
4
if (strrpos($tekst, '/') == strlen($tekst)
{
  
}

Maar dat maakt het niet per definitie netter ofzo.

[edit]
Regex kan ook maar als het niet hoeft doe ik dat zelf liever niet, omdat het nogal ondingen zijn om later nog eens na te kijken.

[ Voor 17% gewijzigd door Cyphax op 06-12-2006 15:17 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik geef ook aan dat ik hem niet echt veilig vind, wil ook geen \ in een link zien....
ga even verder zoeken

Acties:
  • 0 Henk 'm!

  • Tofu
  • Registratie: Maart 2003
  • Laatst online: 05-10-2024
Kan je niet iets met de functie parse_url doen?
Je haalt er de delen uit die je nodig hebt en plakt ze vervolgens weer aan elkaar.

Acties:
  • 0 Henk 'm!

  • Cyphax
  • Registratie: November 2000
  • Laatst online: 21:56

Cyphax

Moderator LNX
Verwijderd schreef op woensdag 06 december 2006 @ 15:17:
ik geef ook aan dat ik hem niet echt veilig vind, wil ook geen \ in een link zien....
ga even verder zoeken
Doe dan een str_replace van alle \ naar /
Zonder de string te doorzoeken dus, dat is dan nergens voor nodig.

[ Voor 11% gewijzigd door Cyphax op 06-12-2006 15:19 ]

Saved by the buoyancy of citrus


Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

btw :

PHP:
1
2
3
4
if ($tekst == "")
{

}


kan wel wat beter !
PHP:
1
2
3
4
5
6
7
8
9
10
if (empty($tekst))
{

}

// of :
if (!isset($tekst))
{

}

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
De laatste / kan je er gewoon met rtrim() afhalen.

PHP:
1
$url = rtrim ( $url, '/' );
k8skaaay schreef op woensdag 06 december 2006 @ 15:18:
btw :

PHP:
1
2
3
4
if ($tekst == "")
{

}


kan wel wat beter !
PHP:
1
2
3
4
5
6
7
8
9
10
if (empty($tekst))
{

}

// of :
if (!isset($tekst))
{

}
Waarom? De variabele $tekst wordt sowieso geset met $tekst = $_POST['text'] dus daarna checken met isset () is niet nodig. Maar wat wel beter kan is kijken of de POST data wel beschikbaar is.

PHP:
1
$tekst = isset ( $_POST['text'] ) ? $_POST['text'] : '';

[ Voor 78% gewijzigd door XWB op 06-12-2006 15:23 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

@k8, als je doet:

PHP:
1
2
3
4
5
$tekst = $_POST['whatever'];

if(!isset($tekst)) {
// dit wordt nooit uitgevoerd want $tekst is gezet ;)
}


zie comment

edit: @Hacku... ohja ff snel je post aanpassen he O-)

[ Voor 14% gewijzigd door Verwijderd op 06-12-2006 15:40 ]


Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
Misschien zoiets?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
$tekst = $_POST['text'];
if (!isset($tekst)) {
?>
<form id="FormName" action="test.php" method="post" name="FormName">
<input type="text" name="text" size="24">
<input type="submit" name="submitButtonName">
</form>
<?php
} else {

 $len = strlen($tekst) - 1;
 
 if ($tekst{$len} == '/')
  $tekst = substr($tekst, 0, $len);
 
 if ($tekst{0} == 'w')
  $tekst = "http://$tekst";

 echo "nieuwe string zonder slash met http is nu: $tekst";   
  
}
?>
Niet getest maar zou motten werken.

Edit: @ Hacku, rtrim .. ook vet :P

[ Voor 4% gewijzigd door sjhgvr op 06-12-2006 15:33 ]

oisd.nl


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$tekst = isset ( $_POST['text'] ) ? $_POST['text'] : '';
if ($tekst == "")
{
    ?>
    <form id="FormName" action="test.php" method="post" name="FormName">
    <input type="text" name="text" size="24">
    <input type="submit" name="submitButtonName">
    </form>
    <?
}
else 
{
    if ( ! preg_match ( '/http:\/\/(.*)/', $tekst ) )
    {
        $tekst = 'http://' . $tekst;
    }
    
    $tekst = rtrim ( $tekst, '/' ); 
    
    printf ( 'Nieuwe url is: %s', $tekst );
}


/edit

Nog korter:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$tekst = isset ( $_POST['text'] ) ? $_POST['text'] : '';
if ($tekst == "")
{
    ?>
    <form id="FormName" action="test.php" method="post" name="FormName">
    <input type="text" name="text" size="24">
    <input type="submit" name="submitButtonName">
    </form>
    <?
}
else 
{
    ! preg_match ( '/http:\/\/(.*)/', $tekst ) && $tekst = 'http://' . $tekst;
    $tekst = rtrim ( $tekst, '/' ); 
    
    printf ( 'Nieuwe url is: %s', $tekst );
}

[ Voor 36% gewijzigd door XWB op 06-12-2006 15:40 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@hacku

Werkt prima, en lekker kort.
Is er nu ook een oplossing om "\" om te zetten naar "/" ?
heb geprobeerd met
$tekst = str_replace("\\","/",$tekst);
geen resultaat......

edit:

Mijn fout, zat in oude bestand te testen...

[ Voor 15% gewijzigd door Verwijderd op 06-12-2006 15:52 ]


Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
$tekst = str_replace("\","/",$tekst);

Zo wel toch...?

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Bram77 schreef op woensdag 06 december 2006 @ 15:50:
$tekst = str_replace("\","/",$tekst);

Zo wel toch...?
Nee, \ moet je escapen. @PG197, dit zou toch prima moeten werken:

PHP:
1
$tekst = str_replace ( '\\', '/', $tekst );


PHP:
1
2
3
4
5
6
7
$tekst = 'http://www\\.google\.be/';

! preg_match ( '/http:\/\/(.*)/', $tekst ) && $tekst = 'http://' . $tekst;
$tekst = str_replace ( '\\', '/', $tekst );
$tekst = rtrim ( $tekst, '/' ); 

printf ( 'Nieuwe url is: %s', $tekst ); // output: http://www/.google/.be

[ Voor 33% gewijzigd door XWB op 06-12-2006 15:52 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
if ($tekst = isset($_POST['text']) ? $_POST['text'] : 0) {
$pre = 'http://';
if (substr($tekst,0,7) == $pre) $tekst = $pre . $tekst;
exit("Nieuwe url is: " . rtrim($tekst, '/'));
}
?>
<form id="FormName" action="test.php" method="post" name="FormName">
<input type="text" name="text" size="24">
<input type="submit" name="submitButtonName">
</form>

Waarom printf gebruiken overigens?

[ Voor 6% gewijzigd door sjhgvr op 06-12-2006 15:55 ]

oisd.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
klopt, zat in verkeerde bestand te werken

Acties:
  • 0 Henk 'm!

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Hacku schreef op woensdag 06 december 2006 @ 15:51:
[...]
Nee, \ moet je escapen. @PG197, dit zou toch prima moeten werken:

PHP:
1
$tekst = str_replace ( '\\', '/', $tekst );
Vanzelfsprekend, ik zit te slapen.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
De php functie parse_url lijkt me een stuk handiger. Kan je ook gelijk de url's met protocollen afwijken van http negeren. (bijv javascript:alert('XSS');)

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
DaPi schreef op woensdag 06 december 2006 @ 15:52:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
if ($tekst = isset($_POST['text']) ? $_POST['text'] : 0) {
$pre = 'http://';
if (substr($tekst,0,7) == $pre) $tekst = $pre . $tekst;
exit("Nieuwe url is: " . rtrim($tekst, '/'));
}
?>
<form id="FormName" action="test.php" method="post" name="FormName">
<input type="text" name="text" size="24">
<input type="submit" name="submitButtonName">
</form>

Waarom printf gebruiken overigens?
Dat vind ik soms overzichtelijker dan steeds de string te onderbreken en printf is erg krachtig voor het formatten van een tekst.

PHP:
1
2
3
4
5
6
7
$a = 5.65854;

printf ( '%f tot twee cijfers na de komma is %.2f', $a, $a );
echo '<br />',
printf ( '%f in hexadecimaal is %X', $a, $a );
echo '<br />',
printf ( '%f in wetenschappelijke notatie is %e', $a, $a );


Enzoverder ;)

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dit is het geworden:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
if (substr($tekst,0,7) == 'http://') 
    {
        $n = strlen($tekst);
        $tekst = substr($tekst,7,$n);
    }
    if (substr($tekst,0,7) !== 'http://') 
    {
        $tekst = str_replace("\\","/",$tekst);
        $tekst = str_replace("//","/",$tekst);
        $tekst = 'http://' . $tekst;   
    }
    $tekst = rtrim ( $tekst, '/' ); 
    echo "Nieuwe url is: $tekst";


dekt alleen niet als mensen "http:\\" intikken.... denk wel dat ze bestaan |:(
mijn dank voor de reacties

Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

En als je die http:\\ nu eerst in het goede format zet middels een str_replace oid?

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
dekt alleen niet als mensen "http:\\" intikken....
Zet ze dan eerst om voor je je checks doet?

PHP:
1
2
3
4
$tekst = str_replace("\\","/",$tekst); 

if (substr($tekst,0,7) == 'http://')
// ...


Verder nog enkele opmerkingen

PHP:
1
2
3
4
5
if (substr($tekst,0,7) !== 'http://')

// moet dit zijn :

if (substr($tekst,0,7) != 'http://')


en die tweede if is niet nodig want als het eerste onwaar is kom je sowieso in het tweede.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$tekst = str_replace("\\","/",$tekst);

if (substr($tekst,0,7) == 'http://') 
{
   $n = strlen($tekst);
   $tekst = substr($tekst,7,$n);
}
else 
{
    $tekst = str_replace("//","/",$tekst);
    $tekst = 'http://' . $tekst;   
}

$tekst = rtrim ( $tekst, '/' ); 
echo "Nieuwe url is: $tekst";


En wat wil je met dit bereiken :

PHP:
1
$tekst = str_replace("//","/",$tekst);


:?

[ Voor 60% gewijzigd door XWB op 06-12-2006 16:33 ]

March of the Eagles


Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
Verwijderd schreef op woensdag 06 december 2006 @ 16:24:
dit is het geworden:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if (substr($tekst,0,7) == 'http://') // Als tekst met http:// begint
    {
                // Doe niets ?
        $n = strlen($tekst);
        $tekst = substr($tekst,7,$n);
    }
    // Waarom dan hier nogmaals kijken of het met http:// begint ?
    if (substr($tekst,0,7) !== 'http://') 
    {
        
        $tekst = str_replace("\\","/",$tekst);

        // Dubbele forwardslashes omzetten naar enkele? Nut ? Kan iemand er netzogoed 10 ingeven
        $tekst = str_replace("//","/",$tekst);
        $tekst = 'http://' . $tekst;   
    }
    $tekst = rtrim ( $tekst, '/' ); 
    echo "Nieuwe url is: $tekst";


dekt alleen niet als mensen "http:\\" intikken.... denk wel dat ze bestaan |:(
mijn dank voor de reacties
Das ranzig ..
heb er ff comments bijgezet
Edit: Spuit 11 :O

oisd.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mijn uitleg dan maar:

Bij:
PHP:
1
$tekst = str_replace("\\","/",$tekst);

Als ik dit doe krijg ik overal waar een \ stond // te staan. Vandaar dat ik daarna heb gezet:
PHP:
1
$tekst = str_replace("//","/",$tekst);

niet mooi maar het werkt.
Waarom doe ik dit niet eerst? Omdat er ook mensen zijn die wel "http://" invoeren. Hierna:
PHP:
1
$tekst = str_replace("//","/",$tekst);

zal dit "http:/" worden.
Dus ik zorg eerst dat de link (zonder http://) klopt, dat de slash goed staat en niet dubbel, daarna plak ik er weer "http://" voor.

Weet dat het niet mooi is, maar nu werkt het wel, anders toch echt niet.

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Volgens mij werkt het juist niet? Je wil er toch overal http:// voor hebben staan? Met dit:

PHP:
1
2
$n = strlen ( $tekst );
$tekst = substr ( $tekst, 7 , $n );


Haal je juist http:// weg.

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lees je altijd een half boek?

Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Schrijf jij altijd maar een halve TS ?
Heb een scriptje gemaakt in php die ervoor moet zorgen dat een ingevoerde link met
"http://" begint en niet eindigd met een "/" (want het gaat om een link naar een map).

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
$output = rtrim(str_replace("\\", "/", $input), "/");
$output = (substr(strtolower($output), 0, 7)=='http://')?'http://'.substr($output, 7):'http://'.$output;


Ofzo?

En hij kan nog korter als het ook HTTP of HttP oid mag zijn:

PHP:
1
2
$output = rtrim(str_replace("\\", "/", $input), "/");
$output = (substr(strtolower($output), 0, 7)=='http://')?$output:'http://'.$output;


En volledig toegepast zodat je kan copy pasten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    $tekst = isset($_POST['text'])?$_POST['text']:''; 
    if ($tekst == "")  { 
?> 
<form id="FormName" action="test.php" method="post" name="FormName"> 
<input type="text" name="text" size="24"> 
<input type="submit" name="submitButtonName"> 
</form> 
<?php
    } else  { 
        $tekst = rtrim(str_replace("\\", "/", $tekst), "/");
        $tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
        echo "nieuwe string zonder slash met http is nu: ".$tekst;  
    }
?>

[ Voor 84% gewijzigd door Verwijderd op 06-12-2006 18:24 ]


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Verwijderd schreef op woensdag 06 december 2006 @ 18:18:
PHP:
1
2
$output = rtrim(str_replace("\\", "/", $input), "/");
$output = (substr(strtolower($output), 0, 7)=='http://')?'http://'.substr($output, 7):'http://'.$output;


Ofzo?

En hij kan nog korter als het ook HTTP of HttP oid mag zijn:

PHP:
1
2
$output = rtrim(str_replace("\\", "/", $input), "/");
$output = (substr(strtolower($output), 0, 7)=='http://')?$output:'http://'.$output;


En volledig toegepast zodat je kan copy pasten:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    $tekst = isset($_POST['text'])?$_POST['text']:''; 
    if ($tekst == "")  { 
?> 
<form id="FormName" action="test.php" method="post" name="FormName"> 
<input type="text" name="text" size="24"> 
<input type="submit" name="submitButtonName"> 
</form> 
<?php
    } else  { 
        $tekst = rtrim(str_replace("\\", "/", $tekst), "/");
        $tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
        echo "nieuwe string zonder slash met http is nu: ".$tekst;  
    }
?>
Het klopt nog niet helemaal, http://www.onzin.com/onzin\\onzin komt nog niet helemaal goed over:
PHP:
1
2
3
4
5
6
    } else  { 
        $tekst = addslashes($tekst);
        $tekst = rtrim(str_replace("\\", "/", $tekst), "/");
        $tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
        echo "nieuwe string zonder slash met http is nu: ".$tekst;  
    }


Ps
Waarom wil je perse \ voorkomen? Er zijn misschien "edge cases" waar het kan voorkomen, maar misschien is de kans op een meteoriet inslag groter.

Acties:
  • 0 Henk 'm!

Verwijderd

EnsconcE schreef op donderdag 07 december 2006 @ 12:42:
[...]


Het klopt nog niet helemaal, http://www.onzin.com/onzin\\onzin komt nog niet helemaal goed over:
Wat klopt daar niet aan? Er komt http://www.onzin.com/onzin//onzin uit, dat klopt toch met wat de TS zegt?
PHP:
1
2
3
4
5
6
    } else  { 
        $tekst = addslashes($tekst);
        $tekst = rtrim(str_replace("\\", "/", $tekst), "/");
        $tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
        echo "nieuwe string zonder slash met http is nu: ".$tekst;  
    }
Waarom zou je hier addslashes gebruiken? Dat heeft echt absoluut geen nut aangezien er geen quotes in een URL kunnen zitten en al zat er een quote in dan heeft het nog niet zo'n nut om die te gaan escapen daar wordt het alleen maar extra fout van...

Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
Verwijderd schreef op donderdag 07 december 2006 @ 13:30:
[...]


Wat klopt daar niet aan? Er komt http://www.onzin.com/onzin//onzin uit, dat klopt toch met wat de TS zegt?


[...]


Waarom zou je hier addslashes gebruiken? Dat heeft echt absoluut geen nut aangezien er geen quotes in een URL kunnen zitten en al zat er een quote in dan heeft het nog niet zo'n nut om die te gaan escapen daar wordt het alleen maar extra fout van...
dit
PHP:
1
2
3
4
5
$tekst = "http://www.onzin.com/onzin\\onzin";
$tekst = rtrim(str_replace("\\", "/", $tekst), "/");
$tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
  
echo $tekst;

Geeft bij mij toch echt http://www.onzin.com/onzin/onzin

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Heb een scriptje gemaakt in php die ervoor moet zorgen dat een ingevoerde link met
"http://" begint en niet eindigd met een "/" (want het gaat om een link naar een map).
Ik vraag me eigenlijk af wat je bedoeld met "want het gaat om een link naar een map". Wat ik weet is dat urls er normaliter zo uitzien:
http://domain.com/directory/ of
http://domain.com/directory/file.html

Als jij slashes verwijderd dan sturen webservers v.z.i.w. een redirect terug met de slash weer toegevoegd. Slashes verwijderen lijkt me dus niet alleen overbodig, maar ook onhandig.

Acties:
  • 0 Henk 'm!

Verwijderd

EnsconcE schreef op donderdag 07 december 2006 @ 13:45:
[...]


dit
PHP:
1
2
3
4
5
$tekst = "http://www.onzin.com/onzin\\onzin";
$tekst = rtrim(str_replace("\\", "/", $tekst), "/");
$tekst = (substr(strtolower($tekst), 0, 7)=='http://')?$tekst:'http://'.$tekst;
  
echo $tekst;

Geeft bij mij toch echt http://www.onzin.com/onzin/onzin
Heb je nog altijd niet gezegd wat daar fout aan is.

Let ook wel even op:

$tekst = "http://www.onzin.com/onzin\\onzin";

Das iets anders als http://www.onzin.com/onzin\\onzin, de dubbele slash is namelijk een ge-escapde slash. Als je echt http://www.onzin.com/onzin\\onzin in wil voeren moet je http://www.onzin.com/onzin\\\\onzin invoeren ;) (of dat formuliertje gebruiken)

De code klopt echt, addslashes toevoegen klopt duidelijk niet.

Acties:
  • 0 Henk 'm!

  • sjhgvr
  • Registratie: Januari 2004
  • Laatst online: 04-08 14:27
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
<?php 
if ($tekst = isset($_POST['text']) ? $_POST['text'] : 0) {

 $pre = 'http://';
 
 if (substr($tekst, 0, 7) == $pre)
  $tekst = substr($tekst, 7);
 
 $ola = explode("/", str_replace("\\", "/", $tekst));
 
 foreach ($ola as $o)
  if (!empty($o))
   $ole[] = $o;
 
 $tekst = $pre .join("/", $ole);
  
 exit("Nieuwe url is: $tekst");
 
}
?>
<form id="FormName" action="test.php" method="post" name="FormName">
<input type="text" name="text" size="24">
<input type="submit" name="submitButtonName">
</form>
Dit zou moeten werken.
Wat doet t script?
- Kijkt als de tekst begint met http://, zoja, verwijderd het.
- Vervang alle backslashes door forward slashes.
- Pluk alle stukjes tussen de forward slashes uit.
- Plak de stukjes (mits ze niet leeg zijn) weer aan elkaar met forward slashes (maakt rtrim overbodig)
- Zet er http:// voor

Ik vond een bug in m'n vorige post vandaar de 'huge' edit.

[ Voor 211% gewijzigd door sjhgvr op 08-12-2006 08:25 ]

oisd.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben niet bekend met PHP maar het kan makkelijker:

C#:
C#:
1
NewURL = "http://" + OldURL.replace("http://", "")


Voor die slash op het einde, moet je wel ietsies meer uitvoeren. Dan moet je namelijk echt controleren of er al een slash staat.

Acties:
  • 0 Henk 'm!

Verwijderd

<input type="text" name="text" value="http://">

:)

[ Voor 8% gewijzigd door Verwijderd op 08-12-2006 13:42 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

ik mis alleen nog de one-liner:
PHP:
1
$url = (strpos($url, 'http://') === 0 ? '' : 'http://') . rtrim(str_replace('\\', '/', $url), '/');

:P

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 21:07

TeeDee

CQB 241

Verwijderd schreef op vrijdag 08 december 2006 @ 13:41:
<input type="text" name="text" value="http://">

:)
Ja slimmerd, en die value kan je ook gewoon weghalen voordat je submit, dus heb je er nog niets aan.
verbaas me trouwens over het feit dat er al > 30 reacties zijn in dit topic

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

TeeDee schreef op vrijdag 08 december 2006 @ 13:49:
[...]
verbaas me trouwens over het feit dat er al > 30 reacties zijn in dit topic
Het verbaast mij dat zoveel mensen echt nodeloos ingewikkeld doen... ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

crisp schreef op vrijdag 08 december 2006 @ 13:55:
[...]

Het verbaast mij dat zoveel mensen echt nodeloos ingewikkeld doen... ;)
We zijn niet allemaal zo goed als jij :/

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 08 december 2006 @ 14:02:
[...]

We zijn niet allemaal zo goed als jij :/
:P

De gouden tip is deze: als je een probleemstelling in 1 zin kan formuleren dan is de kans groot dat PHP er een functie voor heeft. Vaak zijn er wel meerdere manieren om iets op te lossen, maar het verdient dan aanbeveling de methode te gebruiken met de kleinste footprint :)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
TeeDee schreef op woensdag 06 december 2006 @ 15:14:
Ik denk dat je dit beter met een Regular Expression kan doen.
Precies:
PHP:
1
2
preg_match("|^(?:http://)?(.*?)/?$|", $string, $matches = array();
$link = "http://{$matches[1]}";

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Skaah schreef op vrijdag 08 december 2006 @ 19:07:
[...]

Precies:
PHP:
1
2
preg_match("|^(?:http://)?(.*?)/?$|", $string, $matches = array();
$link = "http://{$matches[1]}";
Dan zou ik het zo doen:
PHP:
1
2
if (!preg_match('|^http://|', $string))
  $string = 'http://' . $string;

en dan een rtrim, maar nogmaals: strpos() is gewoon sneller

[ Voor 4% gewijzigd door crisp op 09-12-2006 10:26 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • EnsconcE
  • Registratie: Oktober 2001
  • Laatst online: 19-06 00:07
TeeDee schreef op vrijdag 08 december 2006 @ 13:49:
[...]

Ja slimmerd, en die value kan je ook gewoon weghalen voordat je submit, dus heb je er nog niets aan.
verbaas me trouwens over het feit dat er al > 30 reacties zijn in dit topic
Waarom zou je die verantwoording niet overlaten aan de gebruiker? Als het posten van belang is voor de gebruiker, dan kun je er wel van uit gaan dat ze het goed doen. Wanneer ze het niet doen lijkt het mij een gevalletje van eigen schuld.


De TS heeft genoeg voorbeelden, maar heb em al een tijdje niet gezien
Pagina: 1