【问题标题】:PHP Regular expression function conflictPHP正则表达式函数冲突
【发布时间】:2013-04-17 18:52:17
【问题描述】:

我将php 4 函数用作spliti() 以及php 5 函数preg_match。它在我的本地主机(xampp 版本 1.7.2)中显示输出。但是当我将它上传到我的服务器时,它在 preg_match 中没有显示任何内容并返回 false。我不知道为什么。有人可以帮我解决这个问题吗?

我的功能是获取 html 页面的 doctype 和 char-set。功能如下:

function GetContentType($Data) { // data as the html code
     print preg_match('@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i', $Data, $matches);
    print var_dump($matches);
    if (isset($matches[3]))
        return $matches[3];
    else
        return "No Character set detected.";
}

function GetDocType($Data) { // Data as the html codes
    print preg_match('/<!DOCTYPE (\w.*)dtd">/is', $Data, $patterns);
    print var_dump($patterns);
    $Data = explode(" ", str_replace('"', "", $patterns[1]));
    $Data = $Data[0] . " " . $Data[3] . " " . $Data[4] . " " . $Data[5];
    return str_replace("//EN", "", $Data);
}

【问题讨论】:

  • 有点离题,但很严肃:一个不接受 HTML5 文档类型的文档类型扫描器?!?

标签: php preg-match


【解决方案1】:

来自 PHP 文档:

preg_match() 5.3.6 Returns FALSE if offset is higher than subject length.

我认为这将是这里的问题......

【讨论】:

  • 您能告诉我如何解决吗?我不知道偏移量和主题。
  • $data 是您的主题,偏移量是您的主题 preg_match 应该开始查找的位置,默认设置为 0。基本上,这应该意味着您的 $data 变量是一个空字符串。
  • 你能给我修改后的代码吗?这对我很有帮助。
  • 最好的办法是回显 $Data;在你做 preg_match 之前。这样你就可以调试 $Data。
  • 实际上我是正则表达式的新手。所以我不知道你在说什么。至于这个原因,我问你,如果你能给我这个代码。我在这里所做的是开发一个使用哪种文档类型和字符集的站点列表(基本上是获取哪些站点使用 utf-8,因此理论上它们使用的是英语以外的其他语言)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
相关资源
最近更新 更多