1

我正在尝试操作一个字符串,以便其中的任何引号(“)被<a href>取出<\a>......对不起,如果它之前被问过,但我无法让它工作!顺便说一下,我正在从一个表单然后操作字符串。这基本上是 html,但它是字符串的形式,我想在图像和链接之类的东西上去掉引号......另一件事是,我不想转义引号,因为会破坏链接...重点是html可以使用并且可以正常工作...但是现在,有些东西会自动在普通引号内创建第二组引号,如下所示:<a href="\"http://www.example.com/\""></a>

示例输入为: <p><a href="http://www.example.com">example</a></p>

然而,当我回显它时,它是如何出现的: <p><a href=\"http://www.example.com\">example</a></p>

这是我希望它的外观: <p><a href="http://www.example.com">example</a></p>

所以我实际上会试图摆脱(/)我的坏事......

这是我如何使用它:

我正在使用富文本编辑器编写 html,然后通过带有 post 方法的表单发送它,但它一直放在双引号中......我注意到当我编辑 RTE 的源并取出所有引号时,链接有效...但我不能让我的用户每次都进入源代码并这样做,所以我需要一个自动执行它的解决方案......

4

4 回答 4

1

好的..所以你可以尝试$result = stripslashes($string)或用正则表达式来做

$result = preg_replace( '/\\\\(?=")/', '', $string )

或者

$result = preg_replace( '/\\\\"/', '"', $string )但在这种情况下更好的是$result = str_replace( '\\"', '"', $string )



编辑:这对我来说很好

$input = '<p><a href=\"http://www.example.com\">example</a></p>';

echo htmlspecialchars($input) . '<br/>';

$output = preg_replace( '/\\\\(?=")/', '', $input );

echo htmlspecialchars($output) . '<br/>';
于 2012-10-27T10:59:59.820 回答
0

我之前的回答存在一些问题,但这应该可行。

$string='<a href="gf">ahdasd"asjda</a>';
function replacequotes($matches){
return $matches[1].str_replace('"','',$matches[2]).$matches[3];
}
echo preg_replace_callback('/(<a href=)(.+?)(<\/a>)/','replacequotes',$string);

这是一个演示:http ://codepad.org/nXr7XTpx

于 2012-10-27T10:36:24.217 回答
0

如果您只想替换所有双引号实例而不管它们的位置,那么 str_replace 也可以这样做;

str_replace("\"", "", $string);

(反斜杠用于将引号读取为非文字字符)

当然这种方法的缺点是它是不分青红皂白的,但我想我会发布这个,因为有时你想使用正则表达式,如 preg_match,而其他时候你只想替换其中的子字符串的所有实例在一个字符串中。

于 2012-10-27T10:41:03.617 回答
0

魔术引号已打开。这是我唯一能想到的就是添加那些斜线。

http://php.net/manual/en/security.magicquotes.what.php

http://www.php.net/manual/en/security.magicquotes.disabling.php

于 2012-10-27T11:32:55.727 回答