str_replace HTML с PHP - PullRequest
       0

str_replace HTML с PHP

0 голосов
/ 15 декабря 2010

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

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

$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/>';

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

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

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

$$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 голос
/ 15 декабря 2010

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

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

foreach ($_POST as $key=>$value)
{
    $message = str_replace('{$'.$key.'}', $value, $message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...