【发布时间】:2013-09-25 14:19:19
【问题描述】:
我最近使用了一种模式,用开/关双引号对替换直双引号。
$string = preg_replace('/(\")([^\"]+)(\")/','“$2”',$string);
当 $string 是一个句子,甚至是一个段落时,它也能正常工作。
但是……
我的函数可以被调用来处理一大块 HTML 代码,但它不再像例外一样工作了:
$string = preg_replace('/(\")([^\"]+)(\")/','“$2”','<a href="page.html">Something "with" quotes</a>');
返回
<a href=“page.html”>Something “with” quotes</a>
这是个问题……
所以我想我可以分两次完成:提取标签中的文本,然后替换引号。
我试过了
$pattern='/<[^>]+>(.*)<\/[^>]+>/';
如果字符串是
,它就可以工作$string='<a href="page.html">Something "with" quotes</a>';
但它不适用于以下字符串:
$string='Something "with" quotes <a href="page.html">Something "with" quotes</a>';
有什么想法吗?
伯特兰
【问题讨论】:
-
@Kolink 我知道这会出现。这就是为什么我建议使用 simplexml 并且只将其应用于文本而不是属性。
-
我必须“清理”的字符串在 90% 的情况下是文本字段的值,在某些情况下,您在其中有“位”的 html 代码。这就是解析不合适的原因。
-
在
'Something "with quotes <a href="page.html">Something "with" quotes</a>'的情况下,期望的输出应该是什么?'Something “with quotes <a href="page.html">Something ”with" quotes</a>'或'Something "with quotes <a href="page.html">Something “with” quotes</a>'?