“string”!=“string”
问题描述:
我正在做某种自己的模板系统。我想改变“string”!=“string”
<title>{site('title')}</title>
用函数“site”执行参数“title”。这里的
private function replaceFunc($subject)
{
foreach($this->func as $t)
{
$args = explode(", ", preg_replace('/\{'.$t.'\(\'([a-zA-Z,]+)\'\)\}/', '$1', $subject));
$subject = preg_replace('/\{'.$t.'\([a-zA-Z,\']+\)\}/', call_user_func_array($t, $args), $subject);
}
return $subject;
}
这里的网站:
function site($what)
{
global $db;
$s = $db->askSingle("SELECT * FROM ".DB_PREFIX."config");
switch($what)
{
case 'title':
return 'Title of page';
break;
case 'version':
return $s->version;
break;
case 'themeDir':
return 'lolmao';
break;
default:
return false;
}
}
我试过用 “标题” 来比较$what
(这是这种情况下, “标题”)。 MD5是不同的。 strcmp
给出-1,“==”和“===”返回false。哪里不对? ($what
类型为字符串,你不能改变call_user_func_array
为call_user_func
,因为后来我将使用多个参数。)
编辑:
strlen的$什么 - strlen的标题 403 - 5 嘿 - 看起来像我没有削减休息;)
的var_dump
串(403) “ 标题”
答
您是否尝试过修剪空格?
$what = trim($what)
也许有一个尾随/开始的空格字符。还要确保它们都是同样的套管:
$what = strtolower(trim($what)) //trim and lower
答
您确定没有任何空格吗?使用trim()
摆脱他们。如果md5不同,则字符串不同。 var_dump(str_split($what))
将输出char字符串,如果一个空白不是你的问题也许这有助于。
答
我试图比较$什么(这是“title”这个例子)与“标题”。 MD5是不同的。
这将暗示$what
不是“标题”。你应该在那里加入一些调试语句:
function site($what) {
var_dump($what);
die();
}
检查没有多余的空间或字符,你不期望。
顺便说一句,这是一个如何写软件与安全漏洞。 – Ingo 2010-05-23 16:14:06