Peut-être que si vous enregistrez les chaînes de base de données dans sprint_f format, je ne vois pas d'autre moyen :
$color = 'blue';
define('GRASS_COLOR', 'green');
$text = 'The sky is %s and the grass is %s';
$text = sprintf( $text, $color , GRASS_COLOR );
echo $text;
MISE À JOUR
Apparemment, j'ai été un peu trop rapide avec la constatation 'je ne vois pas d'autre moyen '. En fait, cela est tout à fait réalisable avec l'utilisation de get_defined_vars() et get_defined_constants() les fonctions. L'idée est de collecter toutes les variables et constantes définies par l'utilisateur, puis de les remplacer dans une chaîne. Cela pourrait même être un simple moteur de template ( s'il n'existe pas déjà ).
// place here value from database
$text = 'The sky is $color and</br> the grass is GRASS_COLOR';
$color = 'blue';
define('GRASS_COLOR', 'green');
// collect all defined variables and filter them to get only variables of string and numeric type
$values = array_filter( get_defined_vars(), function( $item ) {
return is_string($item) || is_numeric($item);
});
// append the dollar sign to keys
$keys = array_map( function( $item ) {
return '$'.$item;
}, array_keys( $values ) );
// create the final array by comining the arrays $keys and $values
$vars = array_combine( $keys, array_values( $values ) );
// relpace names of the variables with values
$text = str_replace( array_keys( $vars ), array_values( $vars ), $text );
// collect all constants and replace user defined constants with values
$constants = get_defined_constants( true );
$text = str_replace( array_keys( $constants['user'] ), array_values( $constants['user'] ), $text );
// we are done
echo $text;