2012-04-05 17 views
-2

に私は、クエリでこの機能substr(tbarticles.articlebody,1,200) as description1を使用しますが、いくつかの記事のために、私はテーブルのレイアウト変更やページレイアウトも変更することを確認を使用しました。 html文字も数えているようだ。どうすれば修正できるのか教えてください。SUBSTR()MySQLのクエリ

私はまた、使用mb_substrが、それはdescription1のために何を返しません。

+4

データベースは、文字列としてこれを見て、それはそれはHTMLだということを知っているための方法はありません。 PHPでHTMLを解析し、その値を200文字に短縮する必要があります。 –

答えて

0

@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); 

・ホープ、このことができます。

+1

私はそれが動作すると思います。個人的に、私は[のDOMDocument](http://php.net/manual/en/class.domdocument.php)のように、DOMパーサを使用すると思います。 –

+0

@rgvcorley;ありがとう、私はPHPでbiginnerだし、私はあなたのコードをテストしています。 – Kaveh

+0

@rgvcorley、それはクエリの中にあるので混乱しています。返される文字数は重要ではないと言わざるを得ないが、ページレイアウトが変わらないことが重要だと私にexample.howを送ってください私はあなたの機能を使用する必要がありますか? – Kaveh