我的代码无效?我不想使用str_replace,因为可能有更多的斜杠被替换。我怎样才能使用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;
答案 0 :(得分: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中你根本看不到斜杠。
进一步阅读:
答案 1 :(得分:4)
此问题的根源实际上是它如何写入您的数据库并且可能由magic_quotes_gpc
引起;这用于旧版本和真正的bad idea。
最佳解决方案
这需要几个步骤:
magic_quotes_gpc
修复将HTML放入数据库的脚本。stripslashes()
并保存更改。替代补丁
在呈现HTML之前使用stripslashes()
。
答案 2 :(得分:0)
使用此模式
preg_replace('@\\+@', '\\', $text);
答案 3 :(得分:0)
这会将'符号'前面的两个或多个\符号替换为\'
$theConvertedString = preg_replace("/\\{2,}'/", "\'", $theSourceString);
理想情况下,您不应该首先拥有导致此问题的代码,因此我将在您的代码中查看为什么开始使用\\'。如果您手动将其放入变量中,请将其取出。通常,这也会发生多次调用addslashes()或mysql_real_escape_string()或廉价主机提供商自动转换所有POST请求变量以转义斜杠,并结合您的服务器端PHP代码来执行相同操作。