PHP - 逃避美元符号

时间:2015-07-26 18:50:03

标签: php

如何修改字符串以确保美元符号前面有奇数个反斜杠?

<?php
  $string = file_get_contents('somefile.txt');
  echo($string."\n");
  $string=str_replace ('$' , '\$' ,$string);
  echo($string."\n");
 ?>

somefile.txt

$first
\$second
\\$third
\\\$forth
\\\\$fifth

输出

    $first
\$second
\\$third
\\\$forth
\\\\$fifth
\$first
\\$second
\\\$third
\\\\$forth
\\\\\$fifth

2 个答案:

答案 0 :(得分:5)

你是单引号。在单引号中,美元符号不会被解析为任何内容。在PHP中单引号中没有任何内容自动解析。如果您使用双引号,则会自动解析它们:

echo "$var"; // this will print the value of $var;
echo '$var'; // this will print $var;
echo "\$var";// this escapes the dollar sign so it will print $var;

如果字符串是用双引号创建的,那么之后不能只是转义美元符号,因为它已经被解析为变量。 例如:

$var = 'hello';
$str = "$var";

此时,当$ str的值为hello而不是$ var时,你会尝试添加一个escape \ $。

答案 1 :(得分:2)

这将满足您的要求。

$string = '$first \$second \\$third  \\\$forth \\\\$fifth';
echo $string."\n";
$string = str_replace(['\\','$'], ['', '\$'], $string);
echo $string."\n";

无论如何,在某种程度上。它首先删除所有\,然后将所有$更改为\$

BTW,echo不是一个功能。 :)

我不是正则表达式向导,因此以下内容将向\之前的所有零和偶数$添加反斜杠(除了字符串中的第一个):< / p>

$string = <<<'EOL'
$first $another \$second \\$third  \\\$forth \\\\$fifth
EOL;
var_dump($string);
$string = preg_replace('/([^\\\])(([\\\]{2})+)?\$/', '$1$2\\\$', $string);
var_dump($string);