我想创建一些自定义标签进行翻译,例如
<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>";
理想情况下,我想创建一个新的变量$ string,将我在我的标签中找到的值替换为能够用简单的回声显示它。
所以我想要这样的输出:
echo $string;
//output: Lorem ipsum Some text <h1>Hello</h1> Some other text
你们能帮助我吗?
答案 0 :(得分:2)
Regex
不是治疗HTMLstring
的有效方法。在这里,我们使用DOMDocument
代替Regex
来实现所需的输出。 strip_tags
的最后一步已经完成以实现所需的输出,如果向loadHTML
提供了有效的HTML字符串,则不需要saveHTML($node)
来完成工作。< / p>
<?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>");