この関数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);
お役に立てれば。