※ ChatGPTを利用し、要約された質問です(原文:substrで抜き取った全角文字列を正常に表示)
substrで抜き取った全角文字列を正常に表示
このQ&Aのポイント
$moji2変数の内容をリンクにする際に、全角文字が途切れてしまう現象が発生しています。恐らく、20バイト目が全角文字であるためです。リンクには全角文字を含めることも可能ですが、特定の条件で半角文字に変換する必要があります。
現在の実装では、20バイトを超える文字列に対してはsubstr関数を使用して最初の20バイトを抜き出しています。しかし、この方法では全角文字が途切れてしまいます。
moji2変数を正常に表示させるためには、文字列のバイト数ではなく、表示する文字数を制限する方法を検討する必要があります。具体的な方法としては、mb_substr関数を使用し、文字列のインデックスを指定することができます。これにより、全角文字を途切れることなく表示することができます。
$moji1 = 'あいうえおかきくけこさしすせそ';
$moji2 = 'あいうえお...かきくけこ';
$moji3 = 'なにぬねの';
上記のような3つの文字列を格納した変数があります。
それぞれの変数を使いリンクを貼りたいのですが、20バイトを超えた変数に対しては、substrで20バイトまでを表示し、リンクするようにします。
以下は$moji1をリンクにするソースです。
$byte = strlen($moji1);
if ($byte > 20) {
$moji1 = substr($moji1,0,20);
}
echo '<a href="#">'.$moji1.'</a>';
moji2、moji3も全く同じ処理をします。
結果はmoji1、moji3は上手くいくのですが、moji2に関しては
<a href="#">あいうえお...かき/a>
このように</a>の'<'が消えてしまいます。
恐らく、20バイト目が全角で、表示が上手くいっていないのだと思うのですが、対処法がわかりません。
今は全角に変換してごまかしていますが、半角のものはなるべく半角で表示したいのです。
moji2を正常に表示させるには、どのような書き方をすれば良いのでしょうか。
アドバイスお願いします。
お礼
まさかこんなに早く回答がくるとは思いませんでした。 無事に表示することができました。 とても助かります。ありがとうざございました^^