1

寻找关于如何用弯引号替换文本块中的常规引号的最佳解决方案,但不更改在 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.”
4

2 回答 2

1

使用允许您轻松访问文本节点的 HTML 解析器。正则表达式并不真正适合您的需求。

于 2012-04-16T15:46:16.547 回答
0

如果格式正确,您甚至可以使用 xml 解析器。但是您需要首先打开和关闭所有标签(或以这种方式:)< /br>。然后,您可以将带有 php 的 xhtml 解析为常规 xml。

已编辑:可能重复突出显示文本,但 html 标记除外

于 2012-04-16T15:51:26.513 回答