我想创建一些自定义标签用于翻译,例如
<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>");