3

ここで検索して 1 時間以上グーグルで検索しましたが、これに対する答えが見つからないようです。

変数を含むデータベース クエリから返された文字列がありますが、これらの文字列はすべて一重引用符で囲まれているように見えるため、二重引用符で囲まれた場合のように変数が評価されません。

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;

私の質問は、単一引用符で囲まれた文字列を、変数を評価できる二重引用符で囲まれた文字列に変換するにはどうすればよいですか??

ありがとう

4

3 に答える 3

6

PHP には、現時点でこれを行うための標準的な安全な方法がありません。何年もの間、それを求めるオープンな機能リクエストがありました: http://bugs.php.net/bug.php?id=43901

チケットのコメントの 1 つは、単純な置換を行うための正規表現を提供してい$fooます${foo}

function stringExpand($subject, array $vars) {
  foreach ($vars as $name => $value) {
    $subject = preg_replace(sprintf('/\$\{?%s\}?/', $name), $value, $subject);
  }
  return $subject;
}
于 2011-03-09T05:43:17.777 に答える
2

置き換えたい変数の名前がわかっている場合は、これを行うことができます...

$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 );

これは Nathan の stringExpand 関数よりも高速ですが、変数名がわからない場合は、Nathan の方法を使用してください。

この質問を見つけたときに解決しようとしていた問題は、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
于 2013-02-19T10:57:55.730 に答える
1

次のようなことができます。

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

ただし、データベースからコードを評価することは強くお勧めしません。自分で制御できないものはすべて、セキュリティ リスクです。

于 2011-03-09T05:39:39.860 に答える