我正在尝试将存储在旧的MS Access数据库中的RTF文本读取到新的PHP Web应用程序中。清理后的数据将使用CKEditor显示给用户,这对于解析符合标准的HTML代码非常严格。但是,存储在MS Access中的数据通常格式不正确或使用不推荐使用的HTML代码。以下是我要清理的示例数据:<div align="right">Previous claim $ 935.00<div align="right"> This claim $1,572.50</div></div>该数据本来是两行右对齐的文本,但是MS Access使用了不建议使用的align属性来设置<div>标记的样式,而不是style属性,并且在这种情况下当它们应该是顺序的时,它们将嵌套不正确。要将示例数据转换为两行均右对齐且CKEditor将按预期读取和显示的文本行(即文本显示为右对齐),我试图<div>用<p>标签替换标签,并插入内联样式属性用正确的text-align替换不推荐使用的align属性。我正在使用PHP的DOMXPath通过以下代码清理数据:$dom = new DOMDocument();$dom->loadHTML($dataForCleaning, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);$xpath = new DOMXPath($dom);foreach ($xpath->query('//div[@align]') as $node) { $alignment = $node->getAttribute('align'); $newNode = $dom->createElement('p'); $newNode->setAttribute("style", "text-align:".$alignment); $node->parentNode->insertBefore($newNode, $node); foreach ($node->childNodes as $child) { $newNode->appendChild($child); } $node->parentNode->removeChild($node);}我用来insertBefore代替appendChild尝试使元素序列保持相同,但这是导致此嵌套数据示例中的问题的原因。对于非嵌套<div>标签作为要清除的输入数据,已清理的输出html是正确的。但是,在此嵌套<div>示例中,输出最终为:<p style="text-align:right">Previous claim $ 935.00</p>请注意,文本的第二行(This Claim ...)已被删除,因为它是<div>作为父级的子级嵌套的<div>我不介意结果<p>标签是否仍然嵌套,因为CKEditor最终清理了这些标签,但是我需要确保我不会像当前代码那样丢失数据。在此先感谢您的帮助和指导。-标记
1 回答
- 1 回答
- 0 关注
- 145 浏览
添加回答
举报
0/150
提交
取消