【问题标题】:Replace text backslashes and single quotes替换文本反斜杠和单引号
【发布时间】:2017-09-14 02:27:33
【问题描述】:

get_magic_quotes_gpc()0

如果我对这些数组使用preg_replace()

$replace[0]=">";
$replace[1]="<";
$replace[2]="&";
$replace[3]='"'; 

$pattern[0]="#&gt;#";
$pattern[1]="#&lt;#";
$pattern[2]="#&amp;#";
$pattern[3]="#&quot;#";

$pass=preg_replace($pattern, $replace, $pass);

除了反斜杠和单引号外,它都有效。

我试过这个:

$replace[5]="\\";
$pattern[5]="/&#92;/"; 

但它失败了。

我用的是php5.2

【问题讨论】:

  • 这段代码的意图是什么?我非常关心它的应用。 “魔术语录”被淘汰是有原因的:它们是一个非常糟糕的主意。这与 SQL 转义有关吗?如果是这样,请使用带有占位符值的准备好的语句,并且永远不要这样做。有关此问题和其他问题的建议,请参阅 PHP the Right Way
  • 我在某处读到mysqli(和准备好的语句)可用于 PHP 5 或更高版本并使用 MySQL 4.1.3+。如果您的环境不支持这一点,那么肯定是时候升级了。
  • htmlspecialchars() 会为你做这件事...

标签: php regex preg-replace symbols php-5.2


【解决方案1】:

由于您的模式分隔符与模式中的 # 冲突,您的模式可能无法正常工作。您的$pattern[5] 模式应该可以很好地为您服务。这可能是您在测试过程中的一个简单错误。

以下代码将使用流行且不冲突的斜杠 (/) 作为分隔符替换您的字符数组:(Demo)

$pattern[0]="/&gt;/";
$pattern[1]="/&lt;/";
$pattern[2]="/&amp;/";
$pattern[3]="/&quot;/";
$pattern[4]="/&#39;/";
$pattern[5]="/&#92;/";

$replace[0]=">";
$replace[1]="<";
$replace[2]="&";
$replace[3]='"';
$replace[4]="'";
$replace[5]="\\";

$pass="Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;";
var_export($pass);
echo "\n";
echo preg_replace($pattern, $replace, $pass);

输出:

'Th&#92;is &lt; is &amp; a &gt; sample &quot;string&#39;'
Th\is < is & a > sample "string'

【讨论】:

    猜你喜欢
    • 2014-09-25
    • 1970-01-01
    • 2022-01-27
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    相关资源
    最近更新 更多