ClipBucket 修正影片標題中文內容被截取成亂碼

主要是因為truncate對於中文的辨識不太正確
以至於會把中文拆解錯誤,因此需要修改 modifier.truncate.php

參考了網路上的文章:讓 Smarty 的 truncate 支援 UTF-8 的方法
就開始來動手吧

vim /var/www/html/includes/templatelib/plugins/modifier.truncate.php

這裡主要是要把function smarty_modifier_truncate這個function的內容整個置換掉

  if ($length == 0)
    return '';
  $string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'utf-8');
  for($i = 0, $j = 0; $i < strlen($string); $i++)
  {
    if($j >= $length)
    {
      for($x = 0, $y = 0; $x < strlen($etc); $x++)
      {
        if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
        {
          $x += $number - 1;
          $y++;
        }
        else
          $y += 0.5;
      }
      $length -= $y;
      break;
    }
    if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
    {
      $i += $number - 1;
      $j++;
    }
      else
        $j += 0.5;
  }
  for($i = 0; (($i < strlen($string)) && ($length > 0)); $i++)
  {
    if($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0'))
    {
      if($length < 1.0)
        break;
      $result .= substr($string, $i, $number);
      $length -= 1.0;
      $i += $number - 1;
    }
    else
    {
      $result .= substr($string, $i, 1);
      $length -= 0.5;
    }
  }
  $result = htmlentities($result, ENT_QUOTES, 'utf-8');
  if($i < strlen($string))
    $result .= $etc;
  return $result;

然後就可以了~
記得要順便修改video.html
不然會發現他怎麼把所有的中文字都叫出來了

vim /var/www/html/styles/cbv2new/layout/blocks/video.html

  #大約第19行
  

{$video.title|truncate:40}

#將40修改成15

{$video.title|truncate:15}

This entry was posted in ClipBucket. Bookmark the permalink.