通过PHP搜索和解析HTML自定义标签

时间:2019-05-29 03:18:54

标签: php html

我创建了一组自定义标签,这些标签位于它们自己的包装器中(请参见下面的示例,并且一次在页面上可以有许多不同的标签),我试图找到获取标签的最佳方法,然后他们的信息,最容易让服务器处理。

我能够找到的所有内容至少都过了几年,而且我认为社区中的某个人可能会有想法可以帮助我向更好的方向发展。

[sl_heading tag='h3' padding='10' heading='Our Most Recent Posts' color='' style='' size='' subheading_active='' subheading_size='15' custom_class=''][/sl_heading ]

[sl_posts posts_type='general' categories='24' link='category' posts_style='posts-grid' columns='4' contents='title_read_more' content_length='excerpt_read_more' preview_mode='auto' image_size='thumbnail' items='-1' offset='0' paginate='no']

因此,基本上我想做的是编辑器将其保存到数据库中,并且我试图高效,快速地将其解析为网站端的适当代码。因此,我的方法是检测标签,确定标签的含义和标签的值,然后显示正确的HTML代码。

除了解析代码部分外,我已经拥有一切,而我仍在坚持如何正确搜索和有效查找标签及其值的方法。

PS。感谢您的帮助,我已经搜索了很多SO帖子,所以多年来我一直想问我想做的事情(过时的帖子),因为我只能理解是PHP的早期版本。

1 个答案:

答案 0 :(得分:0)

因此,我花了很多时间研究了一些开源的不同系统,并找到了一个有效,快速的解决方案。我执行了一个简单的功能,然后对其进行了重新设计以使其适合我。这将查找我要查找的所有子字符串文本实例(类似于[start]和[end]),并为我获取它们之间的所有内容。然后,它将替换整个字符串,并将其替换为适当的内容。

请参见下面的代码,将粘贴复制到PHPfiddle.org中以便快速运行。

<?php

function getContents($str, $startDelimiter, $endDelimiter) {
    $contents = array();
    $startDelimiterLength = strlen($startDelimiter);
    $endDelimiterLength = strlen($endDelimiter);
    $startFrom = 0;
    $contentStart = 0;
    $contentEnd = 0;
    while (false !== ($contentStart = strpos($str, $startDelimiter, $startFrom))) {
        $contentStart += $startDelimiterLength;
        $contentEnd = strpos($str, $endDelimiter, $contentStart);
        if (false === $contentEnd) { break; }

        $content_length = $contentEnd - $contentStart;
        $the_content = substr($str, $contentStart, $content_length);
        $replace_this = "$startDelimiter$the_content$endDelimiter";
        $contents[] = array($the_content, $replace_this);
        $startFrom = $contentEnd + $endDelimiterLength;
  }

  return $contents;
}

$thiss = "This is a test text area, filled with dummy text such as: Lorem ipsum dolor sit amet. [advertisers-display]123[/advertisers-display] This is a test text area, filled with dummy text such as: Lorem ipsum dolor sit amet. [advertisers-display]456[/advertisers-display] This is a test text area, filled with dummy text such as: Lorem ipsum dolor sit amet. [advertisers-display]789[/advertisers-display]";

$tag_start = "[advertisers-display]";
$tag_end = "[/advertisers-display]";

$this_array_get = getContents($thiss, $tag_start, $tag_end);
foreach($this_array_get as $this_get) {
    if(isset($this_get[1])) {
        echo "ID $this_get[0] | REPLACE THIS -> $this_get[1] WITH THIS -> [ REPLACED $this_get[0] ]<br />";
        $thiss = str_replace($this_get[1], "[ REPLACED $this_get[0] ]", $thiss, $num);
    }
}
echo "<br /> $thiss";

?>