2010-12-15 2 views
0

У меня есть строка HTML, которую я хочу динамически заменить на переменные PHP из $ _POST.str_replace HTML с PHP

Вот моя строка:

$message = '<html><body><font face="Arial, Helvetica" size=2><strong>Name:</strong> {$first} {$last}<br/><br/>'; 

Вот мой PHP:

foreach ($_POST as $key=>$value) { 
     $$key = mysql_real_escape_string(strip_tags(ucfirst(strtolower($_POST[$key])))); 
     $text = str_replace('{'.$key.'}', $value, $message); 
     //echo $text; 
    } 

Но мой str_replace не работает правильно. Я попытался сделать строку следующим образом:

$message = '<html><body><font face="Arial, Helvetica" size=2><strong>Name:</strong> {' . $first .'} {' . $last . '}<br/><br/>'; 

Но это тоже не работает. Я пробовал множество других комбинаций, и никто из них, похоже, не работает. Некоторая помощь будет оценена по достоинству. Благодарю.

+0

`... (ucfirst (strtolower ($ _ POST [$ key]))));` можно превратить в более удобный `(ucfirst (strtolower ($ value)));) – 2010-12-15 20:46:12

+0

Почему вы работаете `mysql_real_escape_string` на нем? Короче говоря, не ... – ircmaxell 2010-12-15 20:58:14

+0

Что такое _POST? Попробуйте запустить var_dump ($ _ POST); – 2010-12-15 21:01:28

ответ

3

Есть некоторые вещи, которые я не понимаю из следующей строки:

$$key = mysql_real_escape_string(strip_tags(ucfirst(strtolower($_POST[$key])))); 
  • Почему вы используете переменные переменные? $$key
  • Почему вы делите на здоровье $_POST[$key] когда у вас есть доступ к $value?
  • Почему вы используете mysql_real_escape_string для «избежания» HTML?

Я думаю, что это все лишнее.

Одной из причин он не может работать, потому что вы сохраняете модифицированную $message в $text, вместо того, чтобы сохранить его обратно в $message, чтобы гарантировать, что все ключи в конечном итоге будут заменены. Кроме того, я забыл его буквального $ в шаблоне, он должен был быть:

$text = str_replace('{$'.$key.'}', $value, $message); 
______________________^ 

Вот как я бы это сделать:

$_POST = array('first'=>'foo', 'last'=>'bar'); 

$dbData = array(); // don't forget to initialize your array 
foreach ($_POST as $key => $value) { 
    $sanitizedValue = strip_tags(ucfirst(strtolower($value))); 
    $message = str_replace('{$'.$key.'}', $sanitizedValue, $message); 

    // save the mysql-sanitized values to an array for future use 
    $dbData[$key] = mysql_real_escape_string($sanitizedValue); 
} 

echo $message; 
// outputs 
// <html><body><font face="Arial, Helvetica" size=2><strong>Name:</strong> Foo Bar<br/><br/>'; 

Я тестировал его, и он работает.

1

Вы переписываете переменную $text на каждый цикл с str_replace на $message.

Попробуйте это:

foreach ($_POST as $key=>$value) 
{ 
    $message = str_replace('{$'.$key.'}', $value, $message); 
} 
Смежные вопросы