"String"

4 Cevap php

Ben kendi şablonları sisteminin bir çeşit yapıyorum. Ben değiştirmek istiyorum

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

Parametresi "başlığı" ile işlevi "site" yürütme içine. İşte

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;
}

İşte site:

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;
    } 
}

Ben "başlığı" ile (bu durum için "title" olduğu) $what karşılaştırmak için denedim. MD5 farklıdır. strcmp == "", -1 verir ve "===" return false. Yanlış olan nedir? ($what türü dizedir. Sonra ben birden fazla argüman kullanarak olacak çünkü, call_user_func_array call_user_func içine değiştiremezsiniz)

Edit:

Strlen $what - strlen title 403 - 5 Heh - looks like I haven't cut the rest ;)

var_dump

string(403) " title"

4 Cevap

MD5 are diffrent. Strcmp gives -1, "==", and "===" return false.

Atmak var_dump() ve strlen()

Ve özellikle sert durumlar için bu işlevi:

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

Eğer whitespaces Döşeme denediniz mi?

$what = trim($what)

Belki bir bölü / başlayan boşluk karakteri vardır. Ayrıca, her ikisi de eşit derecede kasalı olduğundan emin olun:

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

Herhangi boşlukları yok emin misiniz? Kullan trim() onlardan kurtulmak için. Md5s farklı ise dizeleri farklıdır. var_dump(str_split($what)) irade çıktı karakter tarafından dize karakter, bir boşluk senin sorun değilse belki bu yardımcı olur.

Ben "başlığı" ile (bu durum için "title" olan) $ ne karşılaştırmak için denedim. MD5 farklıdır.

İşte $what "title" olmadığını öneririm. Orada bazı hata ayıklama ifadeleri koymak gerekir:

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

Hiçbir ekstra boşluk veya beklemediğiniz karakter var kontrol edin.