PHP:如何使用 $_GET 从字面上读取参数字符?
Posted
技术标签:
【中文标题】PHP:如何使用 $_GET 从字面上读取参数字符?【英文标题】:PHP: How do I use $_GET to read the parameter characters literally? 【发布时间】:2012-07-20 20:17:37 【问题描述】:我正在尝试创建一个子导航,当脚本在适当的页面和子页面上找到自己时,它会回显“当前”。
我的问题是,当比较 $subpage == $encoded_subpage_name?"current":""
时,带有空格的子导航名称总是等于 false
因为 $encoded_subpage_name
将有一个 +
但 $subpage
不会。
<?php
if (isset($_GET['p']))
$page = $_GET['p'];
else
$page = "";
if (isset($_GET['subp']))
$subpage = $_GET['subp'];
else
$subpage = "";
$subpages = array(
"powered by company",
"text messaging",
"the app",
"NFC",
"your membership",
"faq",
"privacy policy",
"terms & conditions"
);
function buildSubNav($page, $subpages)
foreach ($subpages as $subpage)
$encoded_subpage_name = urlencode($subpage);
echo '<li class="' . selected_subpage($encoded_subpage_name) . '"><a href="?p=' . $page . '&subp=' . $encoded_subpage_name . '"> ' . $subpage . '</a></li>';
function selected_subpage($encoded_subpage_name)
global $subpage;
$subpage = ($subpage);
echo $subpage;
return $subpage == $encoded_subpage_name?"current":"";
?>
<ul>
<?php buildSubNav($page, $subpages); ?>
</ul>
【问题讨论】:
【参考方案1】:使用urldecode:
$subpage = urldecode($_GET['subp']);
【讨论】:
【参考方案2】:您遇到的问题是您在工作的中间进行编码,而不是在实际输出时进行编码。别这样了。
【讨论】:
我承认我们的设计师不应该总是被允许编写生产代码。【参考方案3】:我建议您将代码中的页面名称更改为 URL 友好名称(就像大多数 CMS 对其永久链接所做的那样),然后在您对其进行 URL 编码后字符串将保持不变。
风格的东西:
用 - 替换空格 将“&”替换为“和” 将 ÅÄÖ 等国际字符替换为类似的 AAO 删除所有与字母/数字字符和“-”不匹配的字符在你的情况下会产生类似的东西:
$subpages = array(
"powered-by-company",
"text-messaging",
"the-app",
"NFC",
"your-membership",
"faq",
"privacy-policy",
"terms-and-conditions"
);
可能有趣的链接
Safe characters for friendly url How do I sanitize title URIs?【讨论】:
以上是关于PHP:如何使用 $_GET 从字面上读取参数字符?的主要内容,如果未能解决你的问题,请参考以下文章