PHP - RegEx sorun

0 Cevap php

Örneğin ben, bir PHP dosyasından okunan dizeleri var:

<?php
// Dream Portal (c) 2009-2010 Dream Portal Team
// DreamPortal.english.php; @1.1

global $scripturl, $context;

// General Strings
$txt['forum'] = 'Forum';
$txt['dream_portal'] = 'Dream Portal';
$txt['dp_core_modules'] = 'Collapse or Expand this Module';
$txt['dp_who_forum'] = 'Viewing the forum index of <a href="' . $scripturl . '?action=forum">' . $context['forum_name'] . '</a>.';
$txt['dp_who_portal'] = 'Viewing the portal index of <a href="' . $scripturl . '">' . $context['forum_name'] . '</a>.';
$txt['dp_who_page'] = 'Viewing the page &quot;<a href="' . $scripturl . '?page=%1$s">%2$s</a>&quot;.';
?>

Ve burada ben ne gerek yaptığı anda kullanarak REGEX bulunuyor:

$data = file_get_contents('./'.$language.'/'.$file.'.'.$language.'.php');

$codes = array (
    '/(\' \. \$)(.+?)( \. \')/',
    '/(\= \$)(.+?)( \. \')/',
      '/(\' \. \$)(.+?)(\;)/',
    '/(\[\')(.+?)(\'\])/',
    '/<\?php/s', '/\?>/s', '/<\?/s'
);
$html = array (
    '{$2}',
    '= \'{$2}',
    '{$2}\';',
    '[$2]',
    '',
);
// Since we don't have the values for the vars.
$data = preg_replace($codes, $html, $data);

Bu dizeleri sürekli değişiyor çünkü ANCAK, böyle bir dize gerekli / $ txt dizi değişkenlerin herhangi takılı olduğu ortaya çıkabilir:

$txt['dp_who_page'] = 'Viewing the page &quot;<a href="'.$scripturl.'?page=%1$s">%2$s</a>&quot; . ';

Değişken . ile demetler halinde ve dize değişkeni sonu bu . ';, hangi bu oldu, yukarıda belirtilen ne farklı vardır burada:

$txt['dp_who_page'] = 'Viewing the page &quot;<a href="' . $scripturl . '?page=%1$s">%2$s</a>&quot;.';

Bu iki durumda da, ben bunu gibi yukarıdaki $ txt ['dp_who_page'] dönmek gerekiyor:

Bir forum dizinini görüntüleniyor {context [FORUM_NAME]}.

Şu anda 2 dava ile doğru çalışmıyor.

Yukarıda belirtilen her iki durumda yukarıda aşağıdaki preg_replace kodu kullanarak bunu nasıl yapabiliriz? Ne değişti gerekiyor?

Ben değişkenleri ayıklamak için eval() php fonksiyonunu kullanıyorum.

Tamam, burada tüm fonksiyonudur:

function loadLanguageFile($language, $file) {

    $temp = array();

    $data = file_get_contents('./'.$language.'/'.$file.'.'.$language.'.php');

    $codes = array (
        '/(\' \. \$)(.+?)( \. \')/',
        '/(\= \$)(.+?)( \. \')/',
          '/(\' \. \$)(.+?)(\;)/',
        '/(\[\')(.+?)(\'\])/',
        '/<\?php/s', '/\?>/s', '/<\?/s'
    );
    $html = array (
        '{$2}',
        '= \'{$2}',
        '{$2}\';',
        '[$2]',
        '',
    );
    // Since we don't have the values for the vars.
    $data = preg_replace($codes, $html, $data);

    // We must change this because they are global.
    $data = str_replace('$txt', '$langEditor_txt', $data);
    $data = str_replace('$helptxt', '$langEditor_helptxt', $data);

    eval($data);

    if (isset($langEditor_txt)) {
        $temp['txt'] = $langEditor_txt;
        unset($GLOBALS['langEditor_txt']);
    }
    if (isset($langEditor_helptxt)) {
        $temp['helptxt'] = $langEditor_helptxt;
        unset($GLOBALS['langEditor_helptxt']);
    }

    return $temp;
}

Sen Ben başarmak için çalışıyorum görmek için buraya gidebilirsiniz, temelde, ben dizeleri bu dillerin İngilizce dizelere dayalı, dile kolay tercüme izin istiyorum: Language TEST using this function to load the language. (Şu anda mevcut ingilizce, fransızca, sadece ispanyolca), dilini düzenlemek ve daha sen preg_replace etkileyecek alacak göreceksiniz bir dilin üzerine tıklayın. Eğer DreamPortal dilini düzenlemek Ayrıca, eğer, bunu yapmak için ne gerekiyor iyi bir örnektir. Tüm gerçek ingilizce dosyaları ingilizce dizeleri kadar yükleme (eğer Create It linke tıklayın dışında bir dil View linkine tıklayın sonra) Ayrıca, varsayılan metin textarea kutuları dilleri. Yani preg_replace girişine bu kullandığı varsayılan metin textarea içine belirli dize tanımı.

0 Cevap