2

我的代码不工作?而且我不想使用 str_replace ,因为可能有比 3 更多的斜线被替换。我如何使用 preg_replace 完成这项工作?
我的代码是这样的:

<?php

$str='<li>
                <span class=\"highlight\">Color</span>
                Can\\\'t find the exact color shown on the model pictures? Just leave a message (eg: color as shown in the first picture...) when you place order.
                Please note that colors on your computer monitor may differ slightly from actual product colors depending on your monitor settings.
            </li>';
$str=preg_replace("@\\+@","\\",$str);
echo $str;

在此处输入图像描述

4

4 回答 4

4

其他答案有其优点,但对我来说,您实际上想要完成的事情看起来非常不同。在 php 代码\\\'中,不是三个斜杠后跟一个撇号,而是一个转义的斜杠跟一个转义的撇号,在渲染的输出中,这正是您所看到的 - 一个斜杠后跟一个撇号(无需在呈现的html)。重要的是要意识到转义字符实际上并不是 字符串的一部分。它只是一种帮助您表示通常在 php 中具有非常不同含义的字符的方法 - 在这种情况下,撇号通常终止字符串文字。php 中看似 4 个字符的内容实际上只有字符串中的 2 个字符。

如果这是您的代码的范围,则不需要字符串操作或正则表达式。你真正需要的只是这个:

<?php
$str='<li>
                <span class="highlight">Color</span>
                Can\'t find the exact color shown on the model pictures? Just leave a message (eg: color as shown in the first picture...) when you place order.
                Please note that colors on your computer monitor may differ slightly from actual product colors depending on your monitor settings.
            </li>';
echo $str;
?>

撇号在这里只需要一个转义字符,在呈现的 HTML 中,您根本看不到斜线。

延伸阅读:

于 2013-07-09T01:30:34.303 回答
4

这个问题的根源实际上在于它是如何写入您的数据库的,并且可能是由magic_quotes_gpc; 这是在旧版本中使用的,这是一个非常糟糕的主意

最好的修复

这需要几个步骤:

  1. 通过禁用magic_quotes_gpc.
  2. 编写一个脚本来读取所有现有的数据库条目,应用stripslashes()并保存更改。
  3. 修复演示部分(不过,这可能根本不需要更改。

替代补丁

stripslashes()在呈现 HTML 之前使用。

于 2013-07-09T01:41:22.637 回答
0

使用这种模式

preg_replace('@\\+@', '\\', $text);
于 2013-07-09T01:25:12.330 回答
0

这将用 \' 替换 ' 符号前面的两个或多个 \ 符号

$theConvertedString = preg_replace("/\\{2,}'/", "\'", $theSourceString);

理想情况下,您首先不应该有导致此问题的代码,因此我会先看看为什么您的代码中有 \\' 。如果您已手动将其放入变量中,请将其取出。通常,这也发生在多次调用 addlashes() 或 mysql_real_escape_string() 或廉价的托管服务提供商自动转换所有 POST 请求变量以转义斜杠的情况下,并结合您的服务器端 PHP 代码来做同样的事情。

于 2013-07-09T01:29:30.687 回答