Я сохраняю текст в своей базе данных. Вот следующий текст:
".$teamName.", is the name of a recently formed company hoping to take over the lucrative hairdryer design ".$sector."
После запроса базы данных я назначаю этот текст переменной с именем $news
, а затем повторю ее.
Однако текст выводится на экран точно так же, как указано выше, без переменных $teamName*
и $sector
замененных соответствующими значениями.
Уверяю вас, что как $teamName
и $sector
определены до запроса базы данных.
Возможно ли сделать то, что я пытаюсь сделать?
Возможно, вам будет лучше использовать sprintf()
.
$string = "%s is the name of a recently formed company hoping to take over the lucrative hairdryer design %s."; $teamName = "My Company"; $sector = "sector"; echo sprintf($string, $teamName, $sector); // My Company is the name of a recently formed company hoping to take over the lucrative hairdryer design sector.
В вашей базе данных вы храните $string
. Используйте sprintf()
для замены значений переменных.
Попробуйте использовать это, я думаю: http://php.net/manual/en/function.sprintf.php
Это дикая догадка, но сохранили ли вы имена переменных в базе данных, потому что, возможно, они были в одинарных кавычках и не оценивались?
$foo = 'bar';echo '$foo'; //$foo
$foo = 'bar';echo "$foo"; //bar
Это не так, как это работает. Если вы хотите $teamname
, вам необходимо оценить его, прежде чем хранить его в базе данных. Если вам нужно, чтобы они менялись, вы могли бы сделать некоторую замену строк для всех переменных.
SQL: INSERT INTO ... VALUES ( 'My team has won ##num_won## games this year.')
PHP:
$string = get_string_from_sql(); // substitute for whatever method you are using to get the string. $num_won = 16; $string = str_replace('##num_won##', $num_won, $string); echo $string; // Will echo My team has won 16 games this year.
Вы должны хранить следующую строку в своей базе данных (немного отличающуюся от вашей):
$teamName, is the name of a recently formed company hoping to take over the lucrative hairdryer design $sector.
Затем вы можете сделать одно из двух:
$news = eval('return "'.$news.'";');
…или…
$news = str_replace(array('$teamName','$sector'),array($teamName,$sector),$news);
Или еще лучше, используйте sprintf()
, где строка:
%s, is the name of a recently formed company hoping to take over the lucrative hairdryer design %s.
… и вы получите фактическое значение следующим образом:
$news = sprintf($news, $teamName, $sector);
Попробуй это:
$teamName = 'foo'; $sector = 'bar'; $news = $teamname . ', is the name of a recently formed company hoping to take over the lucrative hairdryer design ' . $sector '.'; echo $news;
Если вы действительно хотите, чтобы двойные кавычки отображались, попробуйте:
$news = '\"' . $teamname . '\", is the name of a recently formed company hoping to take over the lucrative hairdryer design \"' . $sector . '\".';