【问题标题】:php array strip_tags and unsetphp 数组 strip_tags 并取消设置
【发布时间】:2012-01-10 05:42:12
【问题描述】:

大家好,我有一个关于 strip_tags 函数的问题。 我有一个这样的 html 文档。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<p>er</p>
</body>
</html>

还有这个 php 脚本

<?php
$file = "ht.html";
$fp = fopen($file, "r");
$data = fread($fp, filesize($file));
fclose($fp);
$output = str_replace("\t|\t", "|", $data);
$outputline = explode("\n", $output);
$lexeisline=count($outputline);

for ($i = 0; $i < $lexeisline; $i++){
    $outputline[$i]=strip_tags($outputline[$i]);
      if (empty($outputline[$i])){
          unset($outputline[$i]);
}
}
$outputline = array_values($outputline);
$lexeisline=count($outputline);
echo "<p>";
for ($i = 0; $i < $lexeisline; $i++){
echo ($outputline[$i])."<br />";
}
echo "</p>";
?>

问题在于它不会取消设置空变量(从 strip_tags 返回)并回显类似这样的内容。以下是否意味着它回显空字符串? 任何意见或帮助将不胜感激。提前感谢

<p>
<br />
<br />
<br />
<br />Untitled Document
<br />
<br />
<br />er
<br />
<br /></p>

@phpmeh

 Array
    (
        [0] => 
        [1] => 
        [2] => 
        [3] => 
        [4] => Untitled Document
        [5] => 
        [6] => 
        [7] => er
        [8] => 
    )

【问题讨论】:

    标签: php var unset strip-tags


    【解决方案1】:

    您只是在为每个人数数并回声。如果您想跳过空白,请在循环中执行以下操作:

    for ($i = 0; $i < $lexeisline; $i++){
    if(!empty($outputline[$i]) echo ($outputline[$i])."<br />";
    }
    

    希望我理解正确。

    【讨论】:

    • 是的,你明白了!!!!好吧,这与我所做的几乎相同(简化的 thow),并且与我的结果相同。在我的脚本中,我想取消设置空变量,但它不起作用。在您的脚本中,您回显了这些变量不为空,但仍然不起作用。
    • @Calvin:你需要对某事进行空检查,因为你现在只是在做(!empty),试试(!empty(outputline[$i]))
    • @teo6389:你试过if (!empty(outputline[$i])) echo ($outputline[$i])."&lt;br /&gt;";还是不行?
    • 添加回显 '
      '; print_r($输出线);回声'
      ';发布它。
    【解决方案2】:

    我可能错了……但是……

    当你分解这些行时,我很确定它们有一个隐含的 /n,这意味着它们永远不会为空。另一种方法是:

     strlen( $outline[$i] ) > 0 
    

    【讨论】:

    • 我试过了,我的结果也一样。 php 会让我们发疯...
    • 好吧,因为如果有一个隐含 /n,那么它需要是 strlen > 2
    【解决方案3】:

    对于您正在做的事情,这段代码看起来非常巴洛克。下面的代码能满足你的需要吗?

    $lines = file('ht.html');
    $lines = array_map('strip_tags', $lines);
    $lines = array_map('trim', $lines);
    $lines = array_filter($lines);
    
    echo "<p>\n", implode("<br />\n", $lines), "\n</p>";
    

    【讨论】:

    • 是迄今为止最好的解决方案
    • 请注意,逐行应用strip_tags 仍然不是一个好主意,因为您可能有一个跨越多行的标签。最好将strip_tags 应用于整个字符串一次,然后使用explode 拆分成行。但是你并不完全清楚你想让你的代码做什么,这段代码会做和你的代码一样的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多