PHP:用DOMTEXT节点替换Domelement



我想创建一些自定义标签用于翻译,例如

<trad>SOMETHING</trad>

我也有一个带有一些$ GLOBALS变量的文件,例如:

$GLOBALS['SOMETHING'] = 'Some text';

$GLOBALS['SOMETHINGELSE'] = 'Some other text';

所以我能够以这种方式显示我的翻译:

$string = "<trad>SOMETHING</trad>";
$string = preg_replace('/<trad[^>]*?>([\s\S]*?)</trad>/','\1', $string);
echo $GLOBALS[$string];

这很好地工作,但是当我有更复杂的内容(例如以下代码(,或者当我出现更多此标签时,我无法让它起作用:

$string = "Lorem ipsum <trad>SOMETHING</trad> <h1>Hello</h1> <trad>SOMETHINGELSE</trad>";

我理想地想创建一个新的variale $ string,替换我在标签中发现的值并能够用简单的回声显示。

所以我想要这样的输出:

echo $string; //output: Lorem ipsum Some text <h1>Hello</h1> Some other text

你们能帮我吗?

Regex不是治疗HTMLstring的有效方法。在这里,我们使用DOMDocument而不是Regex来实现所需的输出。strip_tags的最后一步是为了实现所需的输出,如果将有效的HTML字符串提供给loadHTML,则无需需要,在这种情况下,saveHTML($node)将完成工作。

尝试此代码段

<?php
ini_set('display_errors', 1);
libxml_use_internal_errors(true);
$array["SOMETHING"]="some text";
$array["SOMETHINGELSE"]="some text other";
$string = "Lorem ipsum <trad>SOMETHING</trad> <h1>Hello</h1> <trad>SOMETHINGELSE</trad>";
$domDocument = new DOMDocument();
$domDocument->loadHTML($string,LIBXML_HTML_NOIMPLIED|LIBXML_HTML_NODEFDTD);
$results=$domDocument->getElementsByTagName("trad");
do
{
    foreach($results as $result)
    {
        $result->parentNode->replaceChild($domDocument->createTextNode($array[trim($result->nodeValue)]),$result);
    }
}
while($results->length>0);
echo strip_tags($domDocument->saveHTML(),"<h1>");

相关内容

  • 没有找到相关文章

最新更新