符号不能在 GET PHP 中打印


symbol can't be printed in GET php

我有一个这样的链接:

http://domain.com/page.php?product=brown+rice

然后在页面.php页面中,我得到了产品:

 $product = $_GET['product'];

 <?php echo $product; ?>

但它只打印:糙米没有+

如何在获取方法中获取 +?

首先,在链接中传递它之前,我将用任何不同的符号替换它:

例如:

     http://domain.com/page.php?product='.str_replace("+","_",$obj->items).'"

然后在页面中.php我将它转回原始符号:

  $product= str_replace("_","+",$_GET['product']);

此方法只会替换网址中带有+符号的所有产品。当您获得它时,它将检查产品名称是否具有符号。

我希望你能理解,这有帮助

首先对

URL 进行编码,然后使用

urlencode() 和 urldecode()

<?php
$_GET['url'] = '123abc+456';
echo $_GET['url'];
echo "<br/>";
echo $_GET['url'] = urlencode($_GET['url']);
echo "<br/>";
echo str_replace('%2B', '+', $_GET['url']);
?>

$_GET变量将+视为一个空间。

URL 编码会针对空格添加%2B

然后用字符串替换对其进行解码。

演示:http://codepad.org/67QVYHY3

可能会有所帮助

echo isset($_GET['product']) ? urlencode($_GET['product']) : 'Product Not Found';
请参考

下面的网址,它已经在stackoverflow中回答了,

PHP - 使用 GET 查询加号

如果您阅读该错误报告的全部内容,您将看到对 RFC 2396 的引用。其中指出 + 是保留的。PHP 将未编码的 + 符号转换为空格是正确的。

您可以在将密文返回给用户时使用 urlencode() 密文。因此,当用户提交密文进行解密时,您可以urldecode()它。如果 PHP 也通过 GET 字符串传入,它会自动为您执行此操作。

底线:+ 必须作为编码值提交给 PHP:%2B

//page 1
$criteria = urlencode("brown+rice");
$URL = "http://example.com/page.php?product={$criteria}";
//page 2
$product = $_GET['product'];
echo $product;

+替换为它的表示%2B

你可以读出 $_SERVER["QUERY_STRING"]

preg_match_all('/('w+)=([^&]+)/', $_SERVER["QUERY_STRING"], $set);
$_GET = array_combine($set[1], $set[2]);

只需写http://example.com/page.php?product=brown%2Brice

%2B 更改为加号,因为 B2(十六进制)是 ASCII 表中的"+"