に私は、クエリでこの機能substr(tbarticles.articlebody,1,200) as description1
を使用しますが、いくつかの記事のために、私はテーブルのレイアウト変更やページレイアウトも変更することを確認を使用しました。 html文字も数えているようだ。どうすれば修正できるのか教えてください。SUBSTR()MySQLのクエリ
私はまた、使用mb_substr
が、それはdescription1
のために何を返しません。
に私は、クエリでこの機能substr(tbarticles.articlebody,1,200) as description1
を使用しますが、いくつかの記事のために、私はテーブルのレイアウト変更やページレイアウトも変更することを確認を使用しました。 html文字も数えているようだ。どうすれば修正できるのか教えてください。SUBSTR()MySQLのクエリ
私はまた、使用mb_substr
が、それはdescription1
のために何を返しません。
@RocketはあなたがPHPを使用する必要があります言うように、ここsimilar questionから取られた機能である: -
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);
・ホープ、このことができます。
私はそれが動作すると思います。個人的に、私は[のDOMDocument](http://php.net/manual/en/class.domdocument.php)のように、DOMパーサを使用すると思います。 –
@rgvcorley;ありがとう、私はPHPでbiginnerだし、私はあなたのコードをテストしています。 – Kaveh
@rgvcorley、それはクエリの中にあるので混乱しています。返される文字数は重要ではないと言わざるを得ないが、ページレイアウトが変わらないことが重要だと私にexample.howを送ってください私はあなたの機能を使用する必要がありますか? – Kaveh
データベースは、文字列としてこれを見て、それはそれはHTMLだということを知っているための方法はありません。 PHPでHTMLを解析し、その値を200文字に短縮する必要があります。 –