通过url PHP传递引号

通过url PHP传递引号,php,get,Php,Get,我正在通过一个URL传递ProductName,其中两个名称中有单引号,这导致按钮不起作用。是否有解决方法?我尝试过使用htmlentities,但这并不能解决问题。我得到了未捕获的SyntaxError:当我尝试单击名称中有引号的产品时,出现了意外的标识符错误 <?php $search = $_GET['search']; require 'db/connect.php'; $result = $db->query("SELECT * FROM products

我正在通过一个URL传递ProductName,其中两个名称中有单引号,这导致按钮不起作用。是否有解决方法?我尝试过使用htmlentities,但这并不能解决问题。我得到了未捕获的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>';

}
?>
您已经将双引号和单引号转换为它们的HTML实体,但是您没有使用执行此操作的变量。您应该在回显中使用$ProductImage,而不是$row['ProductImage'.

更改此行:

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>';
致:


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

这将更改此'location.href=\'cart.php?ProductId='、$ProductId'、&ProductName='、$ProductName'、&ProductPrice='、$ProductPrice'、&ProductQty=1'

发送到以下地址:location.href=\'cart.php?ProductId='$ProductId。“&ProductName=”$产品名称。“&ProductPrice=”$产品价格。“&ProductQty=1”

还可以尝试对多行字符串使用heredoc,并使用大括号渲染变量值,退出时不会出现问题:

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

请参见

您可以创建自己的函数,将特殊字符转换为其他字符,例如,单引号转换为;平方英尺;或者诸如此类的运用你的想象力我该怎么做呢?我正在学习……使用JavaScript=使用PHP=为什么设置所有变量,比如$ProductName,但在echo语句中不使用它们?还应该添加一个关于SQL注入的说明$搜索=$\u获取['search']$结果=$db->querySELECT*从ProductSearch=“$search”的产品中选择;哦呜呜哈哈,到现在为止,我还没有遇到过任何问题!我用句号替换了所有的COMA,但仍然有一个错误。仅适用于产品名称中包含单引号的产品。您可以使用HTML实体替换单引号:$str=str\u replace',&39$str;echo允许多个参数,用逗号分隔。@developerwjk最好使用htmlentities来执行替换。这很有效!我该如何在后记中取消对其编码?我已将其传递到购物车,但现在它显示为&039;这是通过对参数调用htmlentities得到的。只有在HTML中显示某些内容时才应该这样做,而不是在PHP代码中使用它。
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>';
echo <<<END
multi
line
string
variable={$var}
awesome!
END;