[PHP] str_replace werkt niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Godjira
  • Registratie: Februari 2003
  • Laatst online: 10-08 02:06

Godjira

To infinity and beyond!

Topicstarter
Al een tijdje ben ik bezig met een website geschreven in PHP. Om precies te zijn is dit een website die ik maak om daarin mijn MySQL database uit te lezen en dat op de website netjes te ordenen. In die MySQL database staat mijn collectie aan DVD's, Gamecube games, PC Games, etc. Daarbij heb ik ook een link staan naar de afbeeldingen. Nu heb je problemen dat in bestandsnamen bijvoorbeeld geen : tekens gebruikt kunnen worden en dat IE niet een direct het ' teken ondersteund.

Om dit probleem te verhelpen maak ik gebruik van het onderstaande stukje code in PHP:

code:
1
2
3
4
$afb = str_replace("'", "%27", $titel);
$afb = str_replace("?", "", $afb);
$afb = str_replace("&", "%26", $afb);
$afb = str_replace(":", "%20-", $afb);


Dit werkt op zich goed. Heel goed zelfs, alleen bij de ' gaat het fout. Hieronder een voorbeeld van wat er gebeurd wanneer een afbeelding met een ' erin geopend wordt. Als de link geopend wordt is er in de titelbalk te zien dat hij een \ voor de ' zet. Die \ kan ik niet plaatsen, want ik heb die nergens toegewezen. Hier de link met het probleem: http://www.godjira.net/co...image=Luigi%27s%20Mansion . Ook is het probleem te zien bij de eigenschappen van de afbeelding. Ook daarin staat diezelfde \ weer. Heel vreemd.

Hieronder staat de code van image.php en de code van de originele pagina gamecube.php:

image.php:
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
36
37
38
39
40
41
<?php
  if (isset($_GET["type"])){
    $type = $_GET["type"];
  } else {
    $type = "geen";
  }if (isset($_GET["image"])){
    $image = $_GET["image"];
  } else {
    $image = "geen";
  }
?>

<html>
<head>
<style type='text/css'>
body { background-image: url('images/<?php echo $type ?>.jpg'); background-
repeat: no-repeat; background-position: center center; background-attachment:
fixed }
</style>
<link rel='stylesheet' type='text/css' href='main.css'>

<?php
  $afb = str_replace("'", "%27", $image);
  $afb = str_replace("?", "", $afb);
  $afb = str_replace("&", "%26", $afb);
  $afb = str_replace(":", "%20-", $afb);

  echo "<title>" . $afb . "</title>";
?>

</head>
<body>

<?php
  echo "<center>[img]'images/"[/img]</center>";
  echo "<center><br><br><a href='javascript:history.back(1)'><<
Terug</a></center>";
?>

</body>
</html>


gamecube.php
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
include ("sqlconnect.php");

$db = mysql_connect($db_hostname,$db_user,$db_password);
mysql_select_db($db_database);

$type = "gamecube";

?>

<html>
<head>
<title>Gamecube Collectie</title>
<style type='text/css'>
body { background-image: url('images/<?php echo $type ?>.jpg'); background-
repeat: no-repeat; background-position: center center; background-attachment:
fixed }
</style>
<link rel='stylesheet' type='text/css' href='main.css'>
</head>

<body>
<center><table width='100%'>
 <tr>
   <td class='head'><a class='top' href='gamecube.php?
order=Titel'><b>Titel</b></a></a></td>
   <td class='head'><a class='top' href='gamecube.php?
order=Ontwikkelaar'><b>Ontwikkelaar</b></a></td>
   <td class='head'><a class='top' href='gamecube.php?
order=Uitgever'><b>Uitgever</b></a></td>
   <td class='head'><a class='top' href='gamecube.php?
order=Jaar'><b>Jaar</b></a></td>
   <td class='head'><a class='top' href='gamecube.php?
order=Discs'><b>Discs</b></a></td>
   <td class='head'><a class='top' href='gamecube.php?order=Player%27s 
Choice'><b>Player's Choice</b></a></td>
   <td class='head'><a class='top' href='gamecube.php?
order=Blocks'><b>Blocks</b></a></td>
 </tr>
 <tr>
 <td>&nbsp;</td>
 </tr>
 
<?php

if (isset($_GET["order"])){
  $order = $_GET["order"];
} else {
  $order = "Titel";
}
 
$sqlread = mysql_query("SELECT * FROM `gamecube` ORDER BY `" . $order . "`");

// Count rows
  $count = mysql_query("SELECT COUNT(*) AS Total FROM `gamecube`");
  while ($data = mysql_fetch_assoc($count)) {
  $number = $data["Total"];
}

while ($data = mysql_fetch_assoc($sqlread)) {
  $titel = $data["Titel"];
  $ontwikkelaar = $data["Ontwikkelaar"];
  $uitgever = $data["Uitgever"];
  $jaar = $data["Jaar"];
  $discs = $data["Discs"];
  $player = $data["Player's Choice"];
  $blocks = $data["Blocks"];

  $afb = str_replace("'", "%27", $titel);
  $afb = str_replace("?", "", $afb);
  $afb = str_replace("&", "%26", $afb);
  $afb = str_replace(":", "%20-", $afb);

  echo "<tr><td><a href='image.php?type=" . $type . "&image=" . $afb . "'
title='Bekijk de afbeelding van " . $titel . ".'>"  . $titel . "</a></td><td>" .
$ontwikkelaar . "</td><td>" . $uitgever . "</td><td>" . $jaar . "</td><td>" .
$discs . "</td><td>" . $player . "</td><td>" . $blocks . "</td><td>";
}

 echo "<tr><td>&nbsp;</td></tr><tr><td><b>Totaal: " .
$number . "</b></td></tr>";

 mysql_close($db);
?>

 <tr>
   <td>&nbsp;</td>
 </tr>
</table></center>

<center><a href='index.php' title='Ga terug naar de index pagina.'>Index</a> |
<a href='dvd.php' title='Bekijk mijn DVD Collectie.'>DVD's</a> | <a
href='pc_games.php' title='Bekijk mijn PC Games Collectie.'>PC Games</a> | <a
href='pc_software.php' title='Bekijk mijn PC Software Collectie.'>PC Software</a> |
<a href='audio.php' title='Bekijk mijn Audio CD Collectie.'>Audio CD's</a></center><br>
<center><a href='http://www.godjira.net/' title='Ga terug naar mijn
website'>Terug naar de website</a></center>

</body>
</html>


Ik kan zelf de fout niet terug vinden. De fout zit namelijk niet bij die str_replace, daar staat die \ namelijk niet gedefinieerd.

Hieronder nog een aantal linkjes naar de pagina's zelf:

http://collection.godjira.net
http://collection.godjira.net/gamecube.php

Het gebeurd ook bij de andere pagina's, dus niet alleen bij de Gamecube site. Het is overigens zo dat iedere collectie site met de plaatjes naar image.php linkt. Het probleem ligt, volgens mij, bij image.php, want daarin gaat het fout. Het meezenden van de variabelen gaat gewoon goed.

[ Voor 46% gewijzigd door Godjira op 02-03-2004 19:24 ]

Profile


Acties:
  • 0 Henk 'm!

  • andrew
  • Registratie: Februari 2001
  • Laatst online: 10-09-2024
Met de stripslashes() functie kun je het waarschijnlijk wel oplossen.

Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

offtopic:
@TS: onleesbaar, kun je misschien mijn horizontale scrollbar wegwerken?

Acties:
  • 0 Henk 'm!

  • Godjira
  • Registratie: Februari 2003
  • Laatst online: 10-08 02:06

Godjira

To infinity and beyond!

Topicstarter
X-Lars schreef op 02 maart 2004 @ 19:12:
offtopic:
@TS: onleesbaar, kun je misschien mijn horizontale scrollbar wegwerken?
Excuses. Is nu aangepast.

Profile


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

Een directe oplossing voor het probleem kan ik je zo niet geven, maar misschien kun je het iets anders aanpakken: geef i.p.v. de hele bestandsnaam middels GET gewoon het id mee (ik neem aan dat elke titel een id heeft in je db) en haal in image.php bijbehorende titel/bestandsnaam weer uit de db om je image te laten zien.

Acties:
  • 0 Henk 'm!

  • Godjira
  • Registratie: Februari 2003
  • Laatst online: 10-08 02:06

Godjira

To infinity and beyond!

Topicstarter
andrew schreef op 02 maart 2004 @ 19:07:
Met de stripslashes() functie kun je het waarschijnlijk wel oplossen.
YES! Thanks, die werkt inderdaad perfect. Ik heb dus nu de onderstaande 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
36
37
38
39
40
41
42
43
44
45
46
<?php
  if (isset($_GET["type"])){
    $type = $_GET["type"];
  } else {
    $type = "geen";
  }if (isset($_GET["image"])){
    $image = $_GET["image"];
  } else {
    $image = "geen";
  }
?>

<html>
<head>
<style type='text/css'>
body { background-image: url('images/<?php echo $type ?>.jpg'); background-
repeat: no-repeat; background-position: center center; background-attachment:
fixed }
</style>
<link rel='stylesheet' type='text/css' href='main.css'>

<?php
  $afb = stripslashes($image);

  $afb = str_replace("'", "%27", $afb);
  $afb = str_replace("?", "", $afb);
  $afb = str_replace("&", "%26", $afb);
  $afb = str_replace(":", "%20-", $afb);

  $afb2 = str_replace("%27", "'", $afb);
  $afb2 = str_replace("%26", "&", $afb2);
  $afb2 = str_replace(":", "%20-", $afb2);

  echo "<title>" . $afb2 . "</title>";
?>

</head>
<body>

<?php
  echo "<center>[img]'images/"[/img]</center>";
  echo "<center><br><br><a href='javascript:history.back(1)'><< Terug</a></center>";
?>

</body>
</html>


Het is bij deze opgelost. Geweldig zeg... ik kende de functie addslashes() wel, maar stripslashes() kende ik niet.
X-Lars schreef op 02 maart 2004 @ 19:36:
Een directe oplossing voor het probleem kan ik je zo niet geven, maar misschien kun je het iets anders aanpakken: geef i.p.v. de hele bestandsnaam middels GET gewoon het id mee (ik neem aan dat elke titel een id heeft in je db) en haal in image.php bijbehorende titel/bestandsnaam weer uit de db om je image te laten zien.
Nee, stom genoeg heb ik geen ID's in mijn database staan, omdat ik die niet nodig vond. Maar goed, het is in ieder geval opgelost.

Zo simpel DOHHH!! 8)7

[ Voor 69% gewijzigd door Godjira op 02-03-2004 19:53 ]

Profile

Pagina: 1