Q&A

LINE 絵文字 を送信する際に、位置を指定するutf-8 の絵文字があるとindexがずれる現象

前提・実現したいこと

LINE 絵文字を送信したいのですが、utf-8の絵文字が文章内にあるとindexがズレてしまう現象があります。

発生している問題・エラーメッセージ

こちらの手順で、LINE絵文字を送信しているのですが、その際に絵文字の位置をindexで指定する必要がありますが、🤣このようなutf-8の絵文字があると位置がズレてしまいます。 https://developers.line.biz/ja/docs/messaging-api/emoji-list/#specify-emojis-in-message-object

該当のソースコード

マルチバイトでの文字位置の指定になるのですが「あ」だと1でカウントしますが「🤣」だと2でカウントする必要があるようです。

//送信成功(0からカウントします) $emojis = [['index' => 1,'productId'=>'xxx','emojiId' => '002']]; $message_body = 'あ$abc';

//送信失敗 $emojis = [['index' => 1,'productId'=>'xxx','emojiId' => '002']]; $message_body = '🤣$abc';

//送信成功 $emojis = [['index' => 2,'productId'=>'xxx','emojiId' => '002']]; $message_body = '🤣$abc';

//送信成功 $emojis = [['index' => 4,'productId'=>'xxx','emojiId' => '002']]; $message_body = '🤣🤣$abc';

試したこと

文字位置を、phpのmb_strposという関数で数えてるのですが、この絵文字はやはりマルチバイトで1でカウントされます。 本文中のutf-8絵文字を全て探して、それはカウント2で行うなど、無理やり解決する事もできるのですがもっとスムーズな方法がないかと悩んでおります。

同じような現象でお悩みの方いらっしゃったら、ぜひアドバイスいただけますと幸いです。

  • 0
  • 2
  • 434
  • twitter facebook

本当ですね。 ドキュメント確認不足でした。大変たすかりました。

  • 0

挙げていただいたドキュメントのリンク先に https://developers.line.biz/ja/reference/messaging-api/#text-message

https://developers.line.biz/ja/docs/messaging-api/text-character-count/ があり、カウント方法について書かれていますね。絵文字によってはカウントは2以上となります。

プロパティに指定するテキストの文字数、および絵文字の位置は、UTF-16でエンコーディングしたときの符号単位の数および位置です。

お使いの言語でUTF-16でエンコードした時の文字列長を計算する関数を準備すれば良さそうです。

  • 0
Are you sure? question.vm