1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【PHP】マルチバイト文字をバイト数を指定して取得する場合は、mb_strcut()を使うと良い

Posted at

はじめに

業務でマルチバイト文字をバイト数を指定して取得する機会があり、そのときバイトの関係で文字化けしてしまったので、調査した結果を書いておきます。

コード

test.php
<?php
$input = "こんにちは";

// mb_strcut()を使用する例
$cut1 = mb_strcut($input, 0, 7, "UTF-8"); // 7バイトまで切り取る
$cut2 = mb_strcut($input, 0, 6, "UTF-8"); // 6バイトまで切り取る
$cut3 = mb_strcut($input, 0, 5, "UTF-8"); // 5バイトまで切り取る

// substr()を使用する例
$substr1 = substr($input, 0, 7); // 7バイトまで切り取る
$substr2 = substr($input, 0, 6); // 6バイトまで切り取る
$substr3 = substr($input, 0, 5); // 5バイトまで切り取る

// 結果を出力
echo "mb_strcut (7 bytes): " . $cut1 . "\n";
echo "mb_strcut (6 bytes): " . $cut2 . "\n";
echo "mb_strcut (5 bytes): " . $cut3 . "\n";

echo "substr (7 bytes): " . $substr1 . "\n";
echo "substr (6 bytes): " . $substr2 . "\n";
echo "substr (5 bytes): " . $substr3 . "\n";

動かしてみる

mb_strcut()を使うと、バイトのきりの良い所で文字を取得してくれるため文字化けしていません。
substr()の場合は、指定したバイト数まで取得しているため、文字化けする可能性があります。

php test.php 

mb_strcut (7 bytes): こん
mb_strcut (6 bytes): こん
mb_strcut (5 bytes): こ
substr (7 bytes): こん�
substr (6 bytes): こん
substr (5 bytes): こ�
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?