2013-07-26 3 views
2

Мне нужно прочитать строку, чтобы найти переменные (теги) и заменить ее на сохраненные значения. Я использовал% (процентов) для идентификации тегов. Вход должен принять некоторые теги, как% цветовом% и% животных%, так и с PHP Мне нужно вставить реальную строку ... Лучше объяснено с кодами:Проверить строку, чтобы найти переменные внутри (PHP)

// We have some strings stored 
$color = 'white'; 
$animal = 'cat'; 

пользователь должен использовать% цвет%,% животных % или ничего в текстовом поле, чтобы показать переменную, которую он хочет.

// The user text was stored by the $text 
$text = "The quick %color% fox jumps over the lazy %animal%."; 

Значение% цвет% и% животное% от $ текста должен быть заменен на $ цвета и значение животных $. Но как я могу это сделать? Конечный результат должен быть

<p>The quick white fox jumps over the lazy cat.</p> 

WordPress позволяет пользователям сделать это в опциях «PermaLink», так что пользователи могут установить, например, следующие extructure:

http://localhost/site/%category%/%postname%/ 
+0

Добро пожаловать на SO, было бы это проще, если ваши входы поступают в массив, а не отдельные переменные. Вы можете передать массив на 'str_replace' – DevZer0

+0

http://stackoverflow.com/questions/3158743/simple-template-var-replacement-but-with-a-twist – teynon

ответ

0

Если вы доверяете своему вводу использовать preg_replace:

$color = 'white'; 
$animal = 'cat'; 
$text = "The quick %color% fox jumps over the lazy %animal%."; 

$result = preg_replace('/\%([a-z]+)\%/e', "$$1", $text); 

Это означает, что любые строчные символы из-з между символами% будут заменены на PHP переменный с этим именем. Если вы не доверяете своим данным, это серьезный риск для безопасности, хотя вы должны сделать некоторую проверку, чтобы убедиться, что эти переменные разрешены к доступу.

str_replace решение:

$color = 'white'; 
$animal = 'cat'; 
$text = "The quick %color% fox jumps over the lazy %animal%."; 
$vars = array("color","animal"); 

foreach ($vars as $var) { 
$text = str_replace("%{$var}%",$$var,$text); 
} 
echo $text; 

Просто объяснить далее для тех, кто не использовал его раньше двойной знак доллара ($$) указывает на переменную переменную: http://php.net/manual/en/language.variables.variable.php

+0

http://stackoverflow.com/a/3763835/2619379 - хорошее решение, если вы не доверяете входному - вы можете определить массив разрешенных/белых списков. –

+0

Спасибо, это то, что я искал! –

1

Вы можете попробовать

$text = str_replace("%color%", $color, $text); 
$text = str_replace("%animal%", $animal, $text); 
+0

Действительно, спасибо. Есть ли способ сократить это, чтобы сохранить переменные в массиве? –

+0

@ LeonardoGirardi см. Вторую часть моего ответа. –

1

Использование PHP printf функции

$color = 'red'; 
$animal = 'cat'; 
printf("The quick %s fox jumps over the lazy %s",$color,$animal); 
+0

Но пользователь должен изменить позицию. –

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