繁体   English   中英

php - 将单引号字符串转换为双引号

[英]php - convert single quoted string to double quoted

一直在这里搜索和谷歌超过一个小时,似乎无法找到答案。

我有一个从包含变量的数据库查询返回的字符串,但是看起来这些字符串都是单引号返回的,因此变量不会被评估,如果它是双引号的话。

从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;

我的问题是如何将单引号字符串转换为双引号字符串,它能够评估变量?

谢谢

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;
}

如果你知道要替换的变量的名称,你可以这样做......

$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 feed中的换行符有关,并解决了类似这样的问题:

// 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

你可以这样做:

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

但是,我强烈建议不要评估数据库中的任何代码。 任何不受控制的都是安全风险。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM