2014-09-02 2 views
1

J'utilise mes propres cm à partir de zéro, donc, je suis d'ajouter des fonctions utiles pour mon système, mais je me suis coincé sur ce point:preg_replace pas la récupération de données correctes

Une phrase est chargé à partir lang fichier sur tableau, dans ce cas, $lang['sign']['server'] = 'Sign in with your {{servername}} registered account:';, puis, par une fonction, {{servername}} doit être remplacé par $config['servername'].

Ce que j'ai à ce jour sur ma classe de fonctions est la suivante:

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

Im appeler ici cette fonction: $main->set('ssocial', $FUNC->replaceTags($lang['sign']['social']));, mais le résultat est Sign in with your registered account: au lieu de Sign in with your "Server Name Goes Here" registered account.

Des idées sur pourquoi le preg_replace ne récupère pas la valeur?

Aussi, quand $config[”$1”] est à l'intérieur '' comme ceci '$config[”$1”]', la sortie est Sign in with your $config[”servername”] registered account:, donc je n'ai aucune idée de ce qui ne va pas.

Merci d'avance.

+0

'preg_replace ('/\{\{(.*?)\}\}/' ...)' peut-être? '{}' indique la récurrence du match dans RegExps ... bien que je ne suis pas sûr que ça échouera sans quelque chose à faire correspondre avant (pas réellement testé). – CD001

+0

Quant à '$ config [ » $ 1” ] est à l'intérieur '' comme ça « $ config [ » $ 1” ] ' '... qui est à prévoir, apostrophes indiquent les chaînes non-interpolée (par exemple la saucisse $ sera littéralement traitée comme $ saucisse * pas * la variable $ saucisse). – CD001

+0

La sortie est la même en changeant la regex, vide; J'ai essayé avec des choses différentes (avant avec% tag%), mais chaque fois que la sortie devient vide. – pily

Répondre

0

Ceci est un exemple de travail rapide et sale à l'aide 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}}"); 

Sortie:

Hello my custom text 

Quant à savoir pourquoi votre code ne fonctionne pas: le deuxième paramètre de preg_replace est $ config [strtolower ("$ 1")], alors php cherchera littéralement la clé "$1" dans $config, qui n'existe probablement pas.

+0

Merci, a parfaitement fonctionné, et preg_replace, qui était ma première tentative un peu ... – pily

+0

grand, je suis content d'avoir aidé :) –

Questions connexes