2011-02-24 56 views
1

我有一个动态站点地图创建脚本,递归地查看文件系统,并在需要时打开文件的开始,然后查找标签之间的文本。它工作时,设置像...标签与PHP逻辑之间的PHP preg_match

<title>Page Title | Company, Inc.</title> 

但现在我已经添加了皱纹,并成立了方式通过管理工具来管理标题和元信息。以防万一,不进入,我想回退到旧的默认标题信息,但我的preg_match不工作这...

<title><[email protected]$page_meta_array['page_title']!=''?$page_meta_array['page_title']:"Default Title Here";?> | Company, Inc.</title> 

PHP函数,我的页面传递给外观像这样...

function get_title($filename) { 
    $retval = ""; 
    $handle = fopen($filename, "r"); 
    $head = fread($handle, 4096); 
    preg_match(";<title>(.+)</title>;", $head, $matches); 
    if(sizeof($matches) == 2) { 
     $retval = trim($matches[1]); 
    } 
    fclose($handle); 

    return $retval; 
} 

有人能指点我正确的preg_match吗?我希望在上面的第二个示例中返回“Default Title Here”。

感谢

回答

0

这可能做到这一点:

preg_match(';<title><\?[^>]*"([^"]*)"[^>]*></title>;', $head, $matches); 

注意短标签已被弃用,并且可能无法在PHP6工作。

+0

感谢您对短标签语法的帮助和提示。猜测每次我想显示一个变量时,我都必须习惯<?php echo $ x?>。这很糟糕。我得到了的问题,但我敢肯定,可能有更好的方法来实现...也许增加步骤如果我甚至在我的代码中使用XML? – Don 2011-02-28 04:00:25

0

您首先需要解析PHP代码,然后检查匹配项。你为什么不使用$ page_meta_array ['page_title']的内容?

+0

它将使用数组值,如果它已被设置。我构建了一个轻量级管理工具,允许某人为每个页面设置标题/ meta desc/meta关键字。数据曾经是静态的,并没有在可能的页面上设置。当我把代码从数据库中提取新数据时,我做了<?= @ $ page_meta_array ['page_title']!=''?$ page_meta_array ['page_title']:“Default Title Here”;?>部分保持以前静态的地方,直到他们在数据库中添加一个新标题... – Don 2011-02-28 03:52:27