PHP:替换字符串中的双引号,但不替换HTML标记中的引号

时间:2012-04-16 15:43:33

标签: php regex preg-replace

寻找有关如何使用弯引号替换文本块中的常规引号但不更改html标记标记中的引号的最佳解决方案< ....>我尝试过使用preg-replace,例如:

$pattern = '/(?<!=)"\b/';
$lyrics = preg_replace($pattern, "\u201c", $lyrics);
$pattern = '/\b"(?!>)/';
$lyrics = preg_replace($pattern, "\u201d", $lyrics);
$pattern = '/\."/'; // find regular quotes after a period
$lyrics = preg_replace($pattern, ".\u201d", $lyrics);
$pattern = '/\!"/'; // find regular quotes after an exclamation
$lyrics = preg_replace($pattern, "!\u201d", $lyrics);
$pattern = '/"\s/'; // find regular quotes before a space
$lyrics = preg_replace($pattern, "\u201d ", $lyrics);

例如,如果我有以下内容:

<a href="http://somelink.com">"This is a quotation."

我希望它最终成为:

<a href="http://somelink.com">“This is a quotation.”

2 个答案:

答案 0 :(得分:1)

使用HTML解析器,您可以轻松访问文本节点。正则表达式not really suitable可满足您的需求。

答案 1 :(得分:0)

如果它正确形成,你甚至可以使用xml解析器。但是你需要首先打开和关闭所有标签(或者以这种方式打开一些标签:< /br>)。然后,您可以parse the xhtml with php作为常规xml。

已编辑:Highlight text, except html tags

可能重复