"строка"! = "строка" - PullRequest
       28

"строка"! = "строка"

0 голосов
/ 23 мая 2010

Я делаю какую-то собственную систему шаблонов. Я хочу изменить

<title>{site('title')}</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 (что в данном случае "title") с "title". MD5 разные. strcmp дает -1, "==" и "===" возвращают false. Что случилось? ($what тип - строка. Вы не можете изменить call_user_func_array на call_user_func, потому что позже я буду использовать несколько аргументов)

Edit:

Strlen $ what - strlen название 403 - 5 Хех - похоже, я не порезал остальное;)

var_dump

строка (403) " Название "

Ответы [ 4 ]

2 голосов
/ 23 мая 2010

Вы пытались обрезать пробелы?

$what = trim($what)

Возможно, есть пробел / начальный символ пробела.Также убедитесь, что они оба имеют одинаковый корпус:

$what = strtolower(trim($what)) //trim and lower
2 голосов
/ 23 мая 2010

Вы уверены, что нет пробелов? Используйте trim(), чтобы избавиться от них. Если md5s разные, строки разные. var_dump(str_split($what)) выведет строку char с помощью char, если пробел не является вашей проблемой, может быть, это поможет.

2 голосов
/ 23 мая 2010

MD5 различны.Strcmp дает -1, "==" и "===" возвращают ложь:

function dump(&$str) {
  $i=0;
  while (isset($str[$i])) echo strtoupper(dechex(ord($str[$i++])));
}
1 голос
/ 23 мая 2010

Я пытался сравнить $ what (что в данном случае "title") с "title". MD5 бывают разные.

Это предполагает, что $what не является "заголовком". Вы должны добавить туда несколько отладочных операторов:

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

Убедитесь, что нет лишних пробелов или символов, которых вы не ожидали.

...