echo $变量包含未知数量的$符号?

时间:2014-08-24 23:18:38

标签: php escaping echo

想象一下,我们有一个包含多个$符号的变量:

$variable="$xtttt$yddd$hhh"

当我回显变量时,我得到以下内容:

ttttdddhh
发生这种情况是因为它将$ X,$ y和$ h作为空变量处理,我知道我可以通过转义每个$符号来解决这个问题:

 $variable="\$xtttt\$yddd\$hhh"

但问题是我不知道$标志的数量

注意:这也发生在shell脚本

我该如何解决?

4 个答案:

答案 0 :(得分:1)

只需用\ $替换所有$符号即可将其取消

<?php

$newValue = str_replace("$", "\$" ,$variable); 
echo $newValue;

?>

答案 1 :(得分:0)

PHP只会尝试解析使用&#34;双引号&#34;定义的字符串中的变量,但如果它们是使用单引号定义的话,则不会。#/ p>

这是避免额外连接的有用提示。以下示例提供相同的输出。

$foo = $var . ' something ' . $etc;
$foo = "$var something $etc";

您还可以解析数组值和对象属性,

$foo = "Something: {$array['key']}";
$foo = "Something: {$object->property}";

答案 2 :(得分:0)

你可以执行一个简单的str_replace:

$Var = str_replace("$","\$",$var");

甚至更简单。将引号从double(")更改为single(')。这将迫使PHP将值文本读取为纯文本,然后将其解析到shell中并进行正确验证。所以:

$Var = "$xdjdjj$vvsso$vvvk";

可以改为:

$Var = '$xdjdjj$vvsso$vvvk';

答案 3 :(得分:0)

简单地使用单引号(当然,如果变量内容的来源允许它)。见这个例子:

$variable="$xtttt$yddd$hhh";   // reports missing vars
$variable2='$xtttt$yddd$hhh';  // works just fine

echo $variable, "\n", $variable2;

http://ideone.com/i3e10y