“string”!=“string”

时间:2010-05-23 15:11:41

标签: php regex oop preg-match

我正在做某种自己的模板系统。我想改变

<title>{site('title')}</title>

使用参数“title”进入函数“site”执行。这里的

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(本案例中为“title”)与“title”进行比较。 MD5不同。 strcmp给-1,“==”,“===”返回false。怎么了? ($what类型为字符串。您无法将call_user_func_array更改为call_user_func,因为稍后我将使用多个参数)

编辑:

Strlen $ what - strlen title 403 - 5 嘿 - 看起来我没有剪掉其余部分;)

的var_dump

string(403)“ 标题“

4 个答案:

答案 0 :(得分:2)

  

MD5不同。 Strcmp给-1,   “==”和“===”返回false。

投入var_dump()strlen()

这个功能适用于特别困难的情况:

function dump(&$str) {
  $i=0;
  while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}

答案 1 :(得分:2)

你试过修剪空白吗?

$what = trim($what)

也许有一个尾随/开始的空白字符。还要确保它们都是平等的:

$what = strtolower(trim($what)) //trim and lower

答案 2 :(得分:2)

你确定没有空格吗?使用trim()摆脱它们。如果md5s不同,则字符串不同。 var_dump(str_split($what))将通过char输出字符串char,如果空格不是你的问题,这可能会有所帮助。

答案 3 :(得分:1)

  

我试图将$ what(对于本案例“title”)与“title”进行比较。 MD5不同。

这表明$what不是“标题”。你应该在那里输入一些调试语句:

function site($what) {
    var_dump($what);
    die();
}

检查没有你没想到的额外空格或字符。