我在查询中使用此函数substr(tbarticles.articlebody,1,200) as description1
,但对于某些文章,我看到表格布局发生了变化,页面布局也发生了变化。似乎它也计算 html 字符。请让我知道我该如何解决?
我也使用过mb_substr
,但它没有返回任何description1
.
正如@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);
希望这可以帮助。