搜索双引号包围的文本并转换为HTML实体

时间:2017-01-18 18:49:39

标签: php regex

我有很多段落的长文本。我需要搜索所有文本被引号括起来的实例,所以“......”,并将其替换为& ldquo; ...& rdquo;。

我还想检测报价是否缺少结束报价而不是明显转换。

这是我现在能想到的最好的:

$text = preg_replace('/(?<=\s)"(.+?)"(?=\s)/', '&ldquo;\1&rdquo;', $text);

但不确定是否会涵盖所有情况。任何其他建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

我没有看到任何客观标准来选择双引号是开头还是结束报价,除非在开头报价之前或在“正常”文本中的结束报价之后没有单词字符。

您可以尝试这样做:

$text = preg_replace('/\B"([^"]*)"\B/u', '&ldquo;$1&rdquo;', $text);
if (strrpos($text, '"') !== false)
    $text = rtrim(str_replace('"', '&ldquo;', $text)) . '&rdquo;';