通过url PHP传递引号

时间:2015-06-11 23:16:08

标签: php get

我通过URL传递ProductName,其中2个名称中包含单引号(导致按钮不起作用)是否有任何解决方法?我尝试过使用htmlentities(),但这并没有解决问题。当我尝试点击名称中带有引号的产品时,我收到了Uncaught SyntaxError:意外的标识符错误。

    <?php

$search = $_GET['search'];

require 'db/connect.php';


$result = $db->query("SELECT * FROM products WHERE ProductSearch = '$search'");
if($result->num_rows){
echo '<table border="0" cellspacing="0" style="width:100%;">';
echo '<tr><td></td><td><u>Product Name</u></td><td><u>Price</u></td><td><u>Wisconsin Artisans</u></td></tr>';
while($row = $result->fetch_assoc()){
    $ProductId    = $row['ProductId'];
    $ProductImage = htmlentities($row['ProductImage'], ENT_QUOTES, 'UTF-8');
    $ProductName  = $row['ProductName'];
    $ProductPrice = $row['ProductPrice'];
echo '<tr>';
echo '<td><a href="productpage.php?productid=', $row['ProductId'],'"><img height="80px" width="80px "src="', $row['ProductImage'] ,'"/></a></td>';
echo '<td><a id="productlink" href="productpage.php?productid=', $row['ProductId'],'">', $row['ProductName'], '</a></td>';
echo '<td> $', $row['ProductPrice'], '</td>';
echo '<td> ', $row['ProductVendor'], '</td>';
//echo '<td><input type=button onClick="location.href=\'cart.php?ProductId=', $row['ProductId'], '\'" value=\'Add to Cart\' id="addtocart"></td></tr>';
echo '<td><input type=button onClick="location.href=\'cart.php?ProductId=', $ProductId, '&ProductName=', $ProductName, '&ProductPrice=', $ProductPrice, '&ProductQty=1\'" value=\'Add to Cart\' id="addtocart"></td></tr>';
}

echo '</table>';
$result->free();

}
else{

    echo '<h3 style="color:black;">No products here just yet, but there will be soon!</h3>';

}
?>

3 个答案:

答案 0 :(得分:0)

$ProductImage = htmlentities($row['ProductImage'], ENT_QUOTES, 'UTF-8');
...
echo '....', $row['ProductImage'],'">....

您已将双引号和单引号转换为HTML实体,但之后不使用您执行此操作的变量。您应该在回声中使用$ProductImage而不是$row['ProductImage']

答案 1 :(得分:0)

更改此行:

echo '<td><input type=button onClick="location.href=\'cart.php?ProductId=', $ProductId, '&ProductName=', $ProductName, '&ProductPrice=', $ProductPrice, '&ProductQty=1\'" value=\'Add to Cart\' id="addtocart"></td></tr>';

为:

echo '<td><input type=button onClick="location.href=\'cart.php?ProductId=', $ProductId, '&ProductName=', urlencode($ProductName), '&ProductPrice=', $ProductPrice, '&ProductQty=1\'" value=\'Add to Cart\' id="addtocart"></td></tr>';

urlencode()会正确编码产品名称,以便将其放入网址中。这会将引号字符转换为%39

答案 2 :(得分:0)

这改变了'location.href = \'cart.php?ProductId =',$ ProductId,'&amp; ProductName =',$ ProductName,'&amp; ProductPrice =',$ ProductPrice,'&amp; ProductQty = 1 \“”

对此:location.href = \'cart.php?ProductId ='。 $ ProductId。'&amp; ProductName ='。 $ ProductName。'&amp; ProductPrice ='。 $ ProductPrice。'&amp; ProductQty = 1 \'“

同时尝试将heredoc用于多行字符串并使用花括号来呈现变量值,您将不会遇到定型问题:

echo <<<END
multi
line
string
variable={$var}
awesome!
END;

请参阅https://php.net/language.types.string