我有一个产品数组小部件。
一些小部件的名称中有保留的句点符号。
当php遇到句号时会出现问题,其余的小部件名称被忽略。我怎样才能将小部件作为字符串文字读取,以便句点符号不会干扰?
unset($products[$widget]);
我可以用占位符字母替换句点,这样它就不是保留字符,但我不想这样做。
使用它们名称的规范化值作为键,并使用真实的小部件名称作为值。
例子:
function slug($str)
{
$str = strtolower(trim($str));
$str = preg_replace('/[^a-z0-9-]/', '-', $str);
$str = preg_replace('/-.+/', "-", $str);
return $str;
}
$products[slug($widget)] = $widget;
我做了一些错误的假设。小部件名称还包含我没有提及的磅符号,因为我不知道 # 符号会以它们的方式影响代码。
但事实证明,英镑符号毕竟会导致问题,但在使用 unset 命令时不会。
我使用 $_GET[''] 通过 URL 传递了小部件的名称。显然接收 get 不喜欢 # 符号并删除 # 磅符号之后的所有内容。
这是一个快速的解释。Soo……假设我传递了“crank#x.55”的小部件名称。如果我回显 $_GET 变量,您会看到“crank”,而剩余的“#x.55”被剥离。
当我查看 url 时,它显示“crank#x.55”(完整的小部件名称),这让我相信它已正确发送到 $_GET var。当我执行 unset 时,我认为句号(连接)符号正在做一些奇怪的事情,这就是我创建原始问题的原因。(我知道我需要为未来的问题提供更多事实)<--学习过程。
我通过简单地用@符号替换英镑符号解决了这个问题,然后在发布数据后,使用preg_replace将@符号转换回英镑。与pixeline的答案类似,只是稍微适应了我的目的。
谢谢