我试图使用PHP解析一个HTML列表,然后读取列表的内容(例如,儿童和年轻人,居民,专业人员)和标签,在列表中的每一位文本末尾附加一个“/”(除了最后一项),然后输出,而不编辑周围的任何HTML标签。
目前我已经在列表中读到了它,并添加了'/',但我正在移除周围的标记在这个过程中,谁有任何建议的方法做这件事或任何我应该使用的函数? 谢谢
<ol class="breadcrumb">
<li class="inline odd first" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="https://my.northtyneside.gov.uk/category/75/residents" itemprop="url"><span itemprop="title">Residents</span></a></li>
<li class="inline even" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><a href="https://my.northtyneside.gov.uk/category/175/children-and-young-people" itemprop="url"><span itemprop="title">Children and young people</span></a></li>
<li class="inline odd last" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb"><span itemprop="title">Professionals</span></li>
</ol>
<?php
function injectSlashes($breadcrumb){
$doc = new DOMDocument();
$doc->loadHTML($breadcrumb);
$liList = $doc->getElementsByTagName('li');
$liValues = array();
foreach ($liList as $li) {
$liValues[] = $li->nodeValue;
}
$correctBreadcrumb = implode("<span aria-hidden=\"true\">/</span>",$liValues);
return $correctBreadcrumb;
}
?>
一个简单的解决方案是更改存储在每个项目中的数据。
目前,您使用
$liValues[] = $li->nodeValue;
正如您所发现的那样,它只是项目的文本。
要存储HTML,需要使用saveHTML()
。 通常这可能是一个文档片段,但是您可以将其简化为标记中的第一个子元素。。。
$liValues[] = $doc->saveHTML($li->firstChild);
如果需要保留
标记,则会更加复杂。 这段代码提取标记并输出内容,内容如下
<ol class="breadcrumb"></ol>
然后,它像前面一样创建面包屑,并通过将><
替换为>
面包屑<
来插入它。。。
function injectSlashes($breadcrumb){
$doc = new DOMDocument();
$doc->loadHTML($breadcrumb);
// Extract the ol
$ol = $doc->getElementsByTagName('ol')[0];
// Output the HTML for just the ol tag
$olText = $doc->saveHTML($ol->cloneNode());
$liList = $doc->getElementsByTagName('li');
$liValues = array();
foreach ($liList as $li) {
$liValues[] = $doc->saveHTML($li->firstChild);
}
$list = implode("<span aria-hidden=\"true\">/</span>",$liValues);
// Insert the breadcrumbs in the empty ol tag from above
$correctBreadcrumb = str_replace("><", ">".$list."<", $olText);
return $correctBreadcrumb;
}