2014-09-02 3 views
1

Я использую свои собственные CMS с нуля, так что, я буду добавлять полезные функции для моей системы, но я застрял на этом:preg_replace не получение правильных данных

Фраза загружается из файла на языке массив, в данном случае $lang['sign']['server'] = 'Sign in with your {{servername}} registered account:';, а затем, по функции, {{servername}} должен быть заменен на $config['servername'].

Что я до сих пор в моем классе функций заключается в следующем:

public function replaceTags($text) 
{ 
global $config; 
return preg_replace("/{{(.*?)}}/" , $config[strtolower("$1")], $text) ; 
} 

Im вызов этой функции здесь: $main->set('ssocial', $FUNC->replaceTags($lang['sign']['social']));, но результат Sign in with your registered account: вместо Sign in with your "Server Name Goes Here" registered account.

Любые идеи о том, почему preg_replace не извлекает значение?

Кроме того, когда $config[”$1”] находится внутри '', как это '$config[”$1”]', выход Sign in with your $config[”servername”] registered account:, так что у меня нет никаких подсказок о том, что не так.

Заранее спасибо.

+0

'preg_replace ('/\{\{(.*?)\}\}/' ...)' может быть? '{}' означает повторение совпадения в RegExps ... хотя я не уверен, что он потерпит неудачу, если не будет что-то, что можно было бы сопоставить раньше (на самом деле не проверял). – CD001

+0

Что касается '$ config [" $ 1 "], находится внутри '' подобно этому '$ config [" $ 1 "]'' ..., что и следовало ожидать, апострофы обозначают неинтерполированные строки (например, $ sausage будет обрабатываться буквально как $ колбаса * не * переменная $ колбаса). – CD001

+0

Вывод аналогичен изменению регулярного выражения, пустым; я пробовал с разными вещами (раньше с% tag%), но каждый раз вывод пуст. – pily

ответ

0

Это быстрый и грязный рабочий пример использования preg_replace_callback

<?php 

$config = array('server' => 'my custom text'); 

function handler($matches){ 
    global $config; 
    return $config[$matches[1]]; 
} 

function replaceTags($text) 
{ 
    return preg_replace_callback("/{{(.*?)}}/" , 'handler', $text) ; 
} 


print replaceTags("Hello {{server}}"); 

Выход:

Hello my custom text 

А почему ваш код не работает: второй параметр preg_replace составляет $ конфиг [strtolower («$ 1»)], поэтому php буквально ищет ключ "$1" в $config, которого, вероятно, не существует.

+0

Спасибо, отлично работал, и для preg_replace это была моя первая попытка ... – pily

+0

Отлично, я рад, что помог :) –

Смежные вопросы