0

我正在尝试使用 preg_replace 删除 html 文件中的 html 和 body 标签,但不是替换所需的标签,而是整个 html 文件变为空白。我不明白我哪里出错了......我觉得我在一个基本想法上出错了,但不明白这是我正在使用的代码:

$f = fopen ("game1/game.html", "w");
$replacetags=array('<html>', '</html>', '<body>', '</body>','<head>','</head>')
$file=  str_replace( $replacetags,'',$f);
fclose($f);

此外,如果有人可以建议一种更好的方法来删除标签,它会有所帮助....谢谢..

4

5 回答 5

3

你得到的输出是正确的。您出错的地方是当您替换这些标签时,'<html>', '</html>', '<body>', '</body>','<head>','</head>'浏览器无法将其呈现为正常的网页。要在浏览器中显示,您应该遵循正确的格式。

它应该具有以下格式以显示在浏览器中

<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>

供您参考

strip_tags — 从字符串中去除 HTML 和 PHP 标记。你可能也想看看那个。

于 2013-04-02T04:32:34.537 回答
1

str_replace 不适用于 fopen 处理程序(正如我在 php ref 上看到的那样),因此您需要使用它

      $replacetags=array('<html>', '</html>', '<body>', '</body>','<head>','</head>'); 
      $file=  str_replace( $replacetags,'',file_get_contents("game1/game.html"));
      $f = fopen ("game1/game.html", "w");
      fwrite($f,$file);
      fclose($f);
于 2013-04-02T04:37:44.743 回答
1

fopen函数打开一个文件句柄(它是一种resource类型)。

您可能想要使用file_get_contentsandfile_put_contents函数。它们实际上是在文件中读取和写入数据。

于 2013-04-02T04:41:53.440 回答
1

当您消除bodyheadhtml等重要标签时,您将无法在浏览器中看到输出。

因此,str_replace运行良好。您可以通过运行以下代码进行交叉检查:

<?php
   $f =file_get_contents('game1/game.html');
   $replacetags=array('<html>', '</html>', '<body>', '</body>','<head>','</head>')  ;           
   $file=  str_replace( $replacetags,"",$f);

   file_put_contents("output.html", $file);
?>

在浏览器中运行或加载页面(包含上述源代码)后,当您output.html使用文本编辑器打开生成的文件时,您将看不到 body、head 和 html 标签。

UPD: 为什么 HTML 文件完全空白

当您在W模式下使用fopen打开文件或 URL 时,会发生以下情况:

'w':  Open for writing only; place the file pointer at the
 beginning of the file and truncate the file to zero length.
 If the file does not exist, attempt to create it.

当您使用fopen as打开文件时fopen ("game1/game.html", "w");,文件指针被放置在文件的开头并且文件被截断为零长度(空白),因为您没有在 game.html 中写入任何内容,因此 html 文件变为空白。

另请注意: str_replace中的第三个参数是the string or array being searched and replaced on, otherwise known as the haystack. 但是在您的代码中,您传递的第三个参数$f是文件句柄。因此,当您使用 输出$file字符串时echo or print,将打印Resource id #x而不是过滤(目标)字符串。

于 2013-04-02T04:51:05.520 回答
0

fopen 应该是:

$file = fopen('game.html', 'w+');

您的 game.html 页面已被您的代码删除。看看如果不相信我

我也会推荐你一起工作str_ireplace

于 2013-04-02T04:37:57.883 回答