php - конвертировать одинарные кавычки в двойные кавычки - PullRequest
3 голосов
/ 09 марта 2011

Поиск здесь и Google более часа, похоже, не может найти ответ на этот вопрос.

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

то, что возвращается из запроса sql, будет $ result:

Это не будетоцените 2 переменные:

$myname = 'david';
$occupation = 'Beginner';
$result = 'Hello my name is $myname and I my occupation is $occupation';
echo $result;

Это оценит 2 переменные:

$myname = 'david';
$occupation = 'Beginner';
$result = "Hello my name is $myname and I my occupation is $occupation";
echo $result;

Мой вопрос: как мне преобразовать строку в одинарных кавычках в строку в двойных кавычках?в состоянии оценить переменные ??

Спасибо

Ответы [ 3 ]

6 голосов
/ 09 марта 2011

PHP не имеет стандартного безопасного способа сделать это прямо сейчас. В течение многих лет был открыт запрос на добавленную функцию: http://bugs.php.net/bug.php?id=43901

В одном из комментариев к билету предлагается регулярное выражение для простой замены $foo и ${foo}:

function stringExpand($subject, array $vars) {
  foreach ($vars as $name => $value) {
    $subject = preg_replace(sprintf('/\$\{?%s\}?/', $name), $value, $subject);
  }
  return $subject;
}
2 голосов
/ 19 февраля 2013

Если вы знаете имена переменных, которые хотите заменить, вы можете сделать это ...

$myname = 'david';
$occupation = 'Beginner';
$result = 'Hello my name is $myname and I my occupation is $occupation';

$result = str_replace( 
              array('$myname', '$occupation'),  
              array($myname, $occupation),
              $result );

Это будет быстрее, чем функция Натана stringExpand, но если вы не знаете имен переменных, затем используйте метод Натана.

Проблема, которую я пытался решить, когда обнаружил, что этот вопрос связан с переносом строк в ленте csv, и была решена примерно так:

// string from drupals csv feed tamper settings
$string = '22 Acacia Avenue\n Irlam\n Manchester'; 
$string = str_replace('\n', "\n", $string);
print nl2br($string); // demonstrates that the \n's are now linebreak characters
1 голос
/ 09 марта 2011

Вы можете сделать что-то вроде этого:

<?php
$myname = 'david';
$occupation = 'Beginner';
eval("\$result = 'Hello my name is $myname and I my occupation is $occupation';");
echo $result;
?>

Однако я настоятельно НЕ рекомендую оценивать какой-либо код из базы данных. Все, что находится вне вашего контроля, представляет собой угрозу безопасности.

...