1

尽我所能,PREG 和我相处不来,所以,我希望你们中的一位 PHP 大师能提供帮助..

我有一些 HTML 源代码进入 PHP 脚本,我需要从源代码中删除/删除特定项目。

首先,如果这是作为 HTML 的一部分出现的(可能是多个实例):

<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>

我希望它简单地转换为[[[SOMETEXT]]]

请注意,前缀将始终是(我认为):

<SPAN class=placeholder

.. 并且后缀将永远是

</SPAN>

(是的,大写SPAN),但title=""jQuery###="#"片段可能不同。[[[SOMETEXT]]]可以是任何东西。我本质上希望删除 SPAN 标签。

接下来,如果这是作为 HTML 的一部分出现的(也可能是多个实例):

<span style="" class="placeholder" title="">[[[SOMETEXT]]</span>

..同样的事情 - 只希望[[[SOMETEXT]]]部分保留。我认为piece永远是前缀,并且(在这种情况下,小写跨度标签)将是后缀。

我知道这可能需要 2 个 PREG 命令,但希望能够将 html 文本传递到函数中并获得清理/剥离的版本,如下所示:

$dirty_text = $_POST['html_text'];
$clean_text = strip_placeholder_spans($dirty_text);
function strip_placeholder_spans( $in_text ) {
 // all the preg magic happens here, and returns result
}

为清楚起见添加/更新

好的,得到一些好的反馈,并接近。但是,为了更清楚,这里有一个例子。我想将此文本发送到函数 strip_placeholder_spans()

<blockquote>
<h2 align="center">Firefox: <span class="placeholder" title="">[[[ITEM1]]]</span></h2>
<h2 align="center">IE1:<SPAN class=placeholder title="" jQuery1262031390171="46">[[[ITEM2]]]</SPAN>
</h2>
<h2 align="center">IE2:<SPAN class=placeholder title="" jQuery1262031390412="52">[[[ITEM3]]]</SPAN> 
</h2>
<h2 align="center"><br><font face="Arial, Helvetica, sans-serif">COMPLETE</font></h2>
<p align="center">Your Text Can Go Here</p>
<p align="center"><a href="javascript:self.close()">Close this Window</a></p>
<p align="center"><br></p>
<p align="center"><a href="javascript:self.close()"><br></a></p></blockquote>
<p align="center"></p>

当它回来时,应该是这样的:

<blockquote>
<h2 align="center">Firefox: [[[ITEM1]]]</h2>
<h2 align="center">IE1:[[[ITEM2]]]</h2>
<h2 align="center">IE2:[[[ITEM3]]]</h2>
<h2 align="center"><br><font face="Arial, Helvetica, sans-serif">COMPLETE</font></h2>
<p align="center">Your Text Can Go Here</p>
<p align="center"><a href="javascript:self.close()">Close this Window</a></p>
<p align="center"><br></p>
<p align="center"><a href="javascript:self.close()"><br></a></p></blockquote>
<p align="center"></p>
4

3 回答 3

1

第一步:在处理 HTML 时从您的工具箱中删除正则表达式。你需要一个解析器。

第二步:下载simple_html_dom for php。

第三步:解析

$html = str_get_html('<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>');
$spanText = $html->find('span', 1)->innerText;

第四步:盈利!

编辑

$html->find('span.placeholder', 1)->tag, $matches);会返回你想要的。它寻找类=占位符。

于 2009-12-28T21:00:02.987 回答
1

我认为这应该解决你的问题

function strip_placeholder_spans( $in_text ) {
preg_match("/>(.*?)<\//", $in_text, $result);
return $result[1]; }
于 2009-12-28T21:00:47.503 回答
1

使用 HTML 解析。这是最稳健的解决方案。以下代码适用于您发布的两个代码示例:

$s= <<<STR
<span style="" class="placeholder" title="">[[[SOMETEXT]]</span>
Some Other text &amp; <b>Html</b>
<SPAN class=placeholder title="" jQuery1262031390171="46">[[[SOMETEXT]]]</SPAN>
STR;

preg_match_all('/\<span[^>]+?class="*placeholder"*[^>]+?>([^<]+)?<\/span>/isU', $s, $m);
var_dump($m);

使用正则表达式会产生非常集中的代码。此示例将仅处理非常特定的 HTML 和格式良好的 HTML。例如,它不会解析<span class="placeholder">some text < more text</span>. 如果您可以控制源 HTML,这可能就足够了。

于 2009-12-28T21:20:17.967 回答