

[![画像の説明をここに入力](https://i.stack.imgur.com/LIyKZ.jpg)](https://i.stack.imgur.com/LIyKZ.jpg)

[code]

    if(strlen($item->T03_PROMOTION_TITLE)>31) echo mb_substr( $item->T03_PROMOTION_TITLE, 0, 26,"UTF8"); else echo $item->T03_PROMOTION_TITLE;?></a></div>
                                        <div class="bs_font16 ellipsis"><a class="" href="<?php echo appSettings::strWebURL.'/newsdetail/index.php?P=0&ID='.$item->T03_PROMOTION_ID.'&CBR='.$item->T03_PROMOTION_CATEGORY.'#main'?>"><?php if(mb_strlen($item->T03_PROMOTION_CONTENT, '8bit')>160) echo mb_substr( $item->T03_PROMOTION_CONTENT, 0, 51,"UTF8").'...'; else echo $item->T03_PROMOTION_CONTENT;?>
    
[/code]

日本語場合、26文字を表示される。  
英語場合、52文字を表示される。  
日本語と英語を混じった文書は、どのようなコマンドを使用するでしょうか。  
教えていただけませんか。  
ありがとうございます。


CC BY-SA 4.0
2018-05-19T09:03:38.937
44079
2018-06-08T08:18:18.310
2018-05-19T11:47:26.283
3068
27914
question
javascript php
ニュースのタイトル表示は、52バイト内に表示させたい


2行分の文字を表示したいという場合は別のアプローチでの解決方法もあるかと思います。

# cssで2列の範囲外を見えなくする

単純にエリアに２も自分の領域のみ表示するようにしてそれ以降は見えなくしてしまう

[code]

    .area {
      height: 2em;
      overflow: hidden;
    }
    
[/code]

# 範囲外を3てんリーダーにする

ブラウザは限られてきそうですが、CSSで対応できるようです  
<https://tech.recruit-mp.co.jp/front-end/tips-ellipsis/>

文字列で数えるなどの場合いろいろ考えることが多くなるため  
cssでの対応のが簡単かなと思ったのでご提案です。


CC BY-SA 4.0
2018-05-29T07:15:47.530
44357
2018-05-29T07:15:47.530
7455
44079
answer


僕も CSS で解決したほうがいいと思うけど。  
半角文字（ASCII）を `a` に置換し、全角文字（非ASCII）を `Aa` に置換し、  
先頭から52文字中にある `a` の数が先頭から切り出すべき文字数の目安です。

[code]

    <?php
    function abbreviate($title, $length)
    {
        $tmp = $title;
        $tmp = preg_replace('/[\\x20-\\x7E]/iu', 'a', $tmp);
        $tmp = preg_replace('/[^a]/iu', 'Aa', $tmp);
        $tmp = substr($tmp, 0, 52);
        $length = substr_count($tmp, 'a');
        return mb_substr($title, 0, $length, 'UTF-8');
    }
    
    $title = '確認テストtesttesttest確認テストtest確認テストtesttesttest';
    echo $title, PHP_EOL;
    echo abbreviate($title, 52), PHP_EOL, PHP_EOL;
    
    $title = 'testtesttesttesttesttesttesttesttesttesttesttesttesttest';
    echo $title, PHP_EOL;
    echo abbreviate($title, 52), PHP_EOL, PHP_EOL;
    
    $title = '確認テスト確認テスト確認テスト確認テスト確認テスト確認テスト';
    echo $title, PHP_EOL;
    echo abbreviate($title, 52), PHP_EOL, PHP_EOL;
    
[/code]

結果

[code]

    % php abbreviate.php
    確認テストtesttesttest確認テストtest確認テストtesttesttest
    確認テストtesttesttest確認テストtest確認テストtestte
    
    testtesttesttesttesttesttesttesttesttesttesttesttesttest
    testtesttesttesttesttesttesttesttesttesttesttesttest
    
    確認テスト確認テスト確認テスト確認テスト確認テスト確認テスト
    確認テスト確認テスト確認テスト確認テスト確認テスト確
    
[/code]

非ASCII文字、かつ、文字幅が半角相当の文字が含まれる場合は意図した挙動になりません。


CC BY-SA 4.0
2018-06-08T05:33:05.850
44612
2018-06-08T08:18:18.310
2018-06-08T08:18:18.310
28832
28832
44079
answer