每页PHP标题,描述和关键字

时间:2012-08-31 00:45:28

标签: php regex seo

我正在尝试找出一种在每页上创建说明和关键字的方法。

标题是:

{{title=some page title in here}}

为了描述,我会做这样的事情:

{{description=some description per page in here}}

对于关键字元标记,我会这样做:

{{keywords=example keyword, per each page, this is an example}}

我如何使用preg_replace + regex解析来实现这一点,同时它也不会在页面上自动显示,而是放在实际的元信息中,例如:

<title> some page title in here </title>
<meta name="description" content="some description per page in here">
<meta name="keywords" content="example keyword, per each page, this is an example">

示例页面如下所示:

{{title=some page title in here}}
{{description=some description per page in here}}
{{keywords=example keyword, per each page, this is an example}}

<div id="content">
  <h4> Some page title here </h4>
  <p> Some page paragraphs here. </p>
</div> <!--#content-->

当然结果与此类似:

<html>
<head>
  <title> Website Title - some page title in here </title>
  <meta name="description" content="some description per page in here">
  <meta name="keywords" content="example keyword, per each page, this is an example">
</head>
<body>
  <div id="content">
    <h4> Some page title here </h4>
    <p> Some page paragraphs here. </p>
  </div> <!--#content-->
</body>
</html>

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果我正确阅读,你想要包括这样的内容:

<title><?php echo $page_title; ?></title>

之前在剧本中设置了页面标题

答案 1 :(得分:0)

您不需要regex来执行此操作。将页面的元数据放在这样的数组中:

$meta["title"] = "Title";
$meta["description"] = "Description of the Page";
$meta["keywords"] = "Keywords, SEO";

以这种方式输出三个:

<title><?php echo $meta["title"]; ?></title>
<meta name="description" content="<?php echo $meta["description"]; ?>">
<meta name="keywords" content="<?php echo $meta["keywords"]; ?>">

答案 2 :(得分:0)

匹配任何给定的标签:

/(?<=\{\{TAG_NAME=).*?(?=\}\})/

匹配变量标签:

/\{\{(\w*?)=(.*?)\}\}/

然后,第一个子匹配将为您提供标签名称,第二个子匹配将为您提供值。考虑空白:

/\{\{\s*(\w*?)\s*=\s*(.*?)\s*\}\}/

...只要没有人在标签中使用'}}'。

分解:

\{\{

匹配两个开括号。简单。 (它们必须被转义,因为{是正则表达式中的特殊字符。

\s*

贪婪地匹配尽可能多的空白区域。

(\w*?)

匹配不会破坏正则表达式的最短字符串(a-zA-Z0-9和下划线)。括号返回匹配的东西作为子匹配。

\s*=\s*

只用一个等号

来吞噬更多的空格
(.*?)

匹配不会破坏正则表达式的任何字符的最短集合,并将其作为第二个子匹配返回。

\s*\}\}

吞噬最后一个空白区域和关闭大括号(再次,逃脱)。

所以,如果你这样做:

$regex = '/\{\{\s*(\w*?)\s*=\s*(.*?)\s*\}\}/'
preg_match_all($regex, $html, $matches)
$html = preg_replace($regex, '', $html)

然后$matches[1]包含您的所有标记名称,$matches[2]包含所有值,而$html包含您剩余的所有HTML