PHP -转义美元符号


PHP - Escape dollar sign

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

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

你在单引号中。在单引号中,美元符号不会被解析为任何东西。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时,您将尝试添加转义'$。

这将完成您所要求的。

$string = '$first '$second ''$third  '''$forth ''''$fifth';
echo $string."'n";
$string = str_replace(['''','$'], ['', ''$'], $string);
echo $string."'n";
在某种程度上,不管怎样。首先移除所有'然后将所有$更改为'$

BTW, echo不是一个函数。:)

我不是一个正则表达式向导,所以下面将在$之前的所有零和偶数'上添加一个反斜杠(字符串中的第一个除外):

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