我尝试使用this来解决问题:我想用这种方式用文本链接替换文本。
但是如果我使用这个源代码:
#plt.figure('Single Plot',figsize=(20,5))
plt.xlabel('time')
plt.ylabel('speed')
plt.title('speed at timepoint t')
plt.grid(True)
for i in arr:
#plt.figure('Single Plot',figsize=(20,5))
plt.plot(i)
文本被替换,但$dom = new DOMDocument;
$dom->loadHTML($html_content);
function preg_replace_dom($regex, $replacement, DOMNode $dom, array $excludeParents = array()) {
if (!empty($dom->childNodes)) {
foreach ($dom->childNodes as $node) {
if ($node instanceof DOMText &&
!in_array($node->parentNode->nodeName, $excludeParents))
{
$node->nodeValue = preg_replace($regex, $replacement, $node->nodeValue);
}
else
{
preg_replace_dom($regex, $replacement, $node, $excludeParents);
}
}
}
}
preg_replace_dom('/match this text/i', "<a href='http://test.de'>test</a>", $dom->documentElement, array('a'));
打印为纯文本,而不是链接。
我该如何解决这个问题?
答案 0 :(得分:2)
我可以看到'
放错地方了,
<a href='http://test.de>test</a>'
这不是你想要的, 用它替换它,
<a href='http://test.de'>test</a>
正如我看到的那样Link,您可以在最后一行代码中使用preg_replace()
代替preg_replace_dom()
。
希望这有帮助。
答案 1 :(得分:0)
这并不像我希望的那样干净,但我让它工作了。我现在知道这是一个老问题,但答案仍然相关。您需要将 dom 文档传递到该方法中,因为您必须创建一个新的 HTML 节点来替换旧的节点。你不能只用 HTML 替换文本,你必须用新的 HTML 节点替换 HTML 节点。很想听听任何关于如何改进的建议
private function _preg_replace_dom($regex, $domDocument, $replacement, DOMNode $dom, array $excludeParents = array()) {
if (!empty($dom->childNodes)) {
$replacementNodes = array();
foreach ($dom->childNodes as $node) {
if ($node instanceof DOMText && !in_array($node->parentNode->nodeName, $excludeParents))
{
//$node->nodeValue = preg_replace($regex, $replacement, $node->nodeValue);
$replacementHtml = preg_replace($regex, $replacement, $node->nodeValue);
$linkReplacement = $domDocument->createDocumentFragment();
$linkReplacement->appendXML($replacementHtml);
$tmpreplacement = new stdClass();
$tmpreplacement->oldNode = $node;
$tmpreplacement->newNode = $linkReplacement;
$replacementNodes[] = $tmpreplacement;
}
else
{
$this->_preg_replace_dom($regex, $domDocument, $replacement, $node, $excludeParents);
}
}
foreach($replacementNodes as $replacement)
{
$dom->replaceChild($replacement->newNode, $replacement->oldNode);
}
}
}