-2

我在查询中使用此函数substr(tbarticles.articlebody,1,200) as description1,但对于某些文章,我看到表格布局发生了变化,页面布局也发生了变化。似乎它也计算 html 字符。请让我知道我该如何解决?

我也使用过mb_substr ,但它没有返回任何description1.

4

1 回答 1

0

正如@Rocket 所说,您将需要使用 php,这是一个取自类似问题的函数:-

function html_cut($text, $max_length)
{
$tags   = array();
$result = "";

$is_open   = false;
$grab_open = false;
$is_close  = false;
$in_double_quotes = false;
$in_single_quotes = false;
$tag = "";

$i = 0;
$stripped = 0;

$stripped_text = strip_tags($text);

while ($i < strlen($text) && $stripped < strlen($stripped_text) && $stripped < $max_length)
{
    $symbol  = $text{$i};
    $result .= $symbol;

    switch ($symbol)
    {
       case '<':
            $is_open   = true;
            $grab_open = true;
            break;

       case '"':
           if ($in_double_quotes)
               $in_double_quotes = false;
           else
               $in_double_quotes = true;

        break;

        case "'":
          if ($in_single_quotes)
              $in_single_quotes = false;
          else
              $in_single_quotes = true;

        break;

        case '/':
            if ($is_open && !$in_double_quotes && !$in_single_quotes)
            {
                $is_close  = true;
                $is_open   = false;
                $grab_open = false;
            }

            break;

        case ' ':
            if ($is_open)
                $grab_open = false;
            else
                $stripped++;

            break;

        case '>':
            if ($is_open)
            {
                $is_open   = false;
                $grab_open = false;
                array_push($tags, $tag);
                $tag = "";
            }
            else if ($is_close)
            {
                $is_close = false;
                array_pop($tags);
                $tag = "";
            }

            break;

        default:
            if ($grab_open || $is_close)
                $tag .= $symbol;

            if (!$is_open && !$is_close)
                $stripped++;
    }

    $i++;
}

while ($tags)
    $result .= "</".array_pop($tags).">";

return $result;
}

编辑:我怀疑您的页面布局发生变化的原因是因为 substr 正在破坏您的 html。你需要做的是返回所有,tbarticles.articlebody一旦你把它放在 php 中的一个变量中(例如$result['articlebody']),然后使用下面的函数将它修剪到正确的长度。

所以像: -

 # Get entire field from database, don't use substr
 $result = mysql_query("SELECT tbarticles.articlebody as description1 FROM your_table");
 $row = mysql_fetch_array( $result );

 # Now make the description the correct length using the function above
 $short_description = html_cut($row['description1'], 200);

希望这可以帮助。

于 2012-04-05T21:41:46.690 回答