PHP GET 参数 - 使带和不带 space 的参数意思相同

PHP GET parameters - Make parameters with and without space mean same

首先,如果我的标题不够准确,请见谅。

是否可以,如果可以,如何使参数“city=Los%20Angeles”和“city=LosAngeles”相同?我有按城市搜索的广告网站,问题是有些广告的城市变量包含 space (%20),有些则不包含。这是搜索广告时的一个问题,因为搜索 洛杉矶 不会显示包含城市 LosAngeles 的广告。

所以第一个 url 需要展示第一个和第二个 url 的广告 第一 url https://www.mywebsite.com/city-Los%20Angeles/listings.html 第二 url https://www.mywebsite.com/city-LosAngeles/listings.html

如果有帮助,我使用smarty模板引擎。

如果我从你的描述中了解到的是真实的,你想从传递的参数中删除空 space 字符。

如果是这样,这可能对你有用

$param_city = str_replace("%20", "", $_POST['city']);

如果您想在 PHP 中查看它,只需执行以下操作: $str = $_GET['city']; echo $str . " "; echo trim($str,"Hed!"); 这将允许您在 PHP.

中以相同的方式阅读它

或者您可以在 HTACCESS 文件中执行此操作。

  1. 将您的 $_GET 值放入参数中
  2. 使用 urldecode (http://php.net/manual/en/function.urldecode.php) 转换 URL 编码
  3. 使用str_replace http://php.net/manual/en/function.str-replace.php)去除空格 $val = str_replace(" ", "", $yourVariable)

    $city = urldecode($_GET["city"]);

    $city = str_replace(" ", "", $city);

最好的方法是在收到变量后对其进行标准化。无论如何,这是一个很好的做法,因为您会希望在过滤过程中删除任何潜在危险的字符。

所以,虽然这是一个不错的选择:

$city = str_replace('%20', '', $city);

如果您知道只处理字母就可以了,并且不区分大小写也很好,那么也许您可以这样做:

$city = preg_replace('/[^a-z]/', '', strtolower($city));

这个后面的选项还可以防止代码的其他部分可能无法很好处理的任何恶意字符。此外,假设拼写正确,这应该意味着对于每个城市,只有一个可能的字符串。

好吧,我按照 Dom C 说的做了,它正在工作,但我不知何故忘记 post 它。

谢谢大家的回答。