私はポータルの不動産フィードを行っており、文字列の最大長は20,000バイト(20kb)である必要があると言っていますが、これに遭遇したことはありません。
varchar string
のbyte
サイズを測定するにはどうすればよいですか。そのため、whileループを実行して、それを削減できます。
文字列がASCIIでエンコードされているか、マルチバイト形式でエンコードされているかを把握する必要があります。
前者の場合、strlen
を使用できます。
後者の場合、文字ごとのバイト数を見つける必要があります。
strlenのドキュメントには、その方法の例が記載されています。 http://www.php.net/manual/en/function.strlen.php#72274
Mb_strlen()を使用すると、マルチバイト文字列またはシングルバイト文字列を気にせずに、バイト文字のみを持つエンコーディングを使用してバイト長を取得できます。たとえば、drake127がmb_strlenのコメントで述べているように、「8ビット」エンコーディングを使用できます。
<?php
$string = 'Cién cañones por banda';
echo mb_strlen($string, '8bit');
?>
Phpには、strlenをオーバーロードして実際にmb_strlenを呼び出すオプションがあるため、strlen関数を使用すると問題が発生する可能性があります。詳細については http://php.net/manual/en/mbstring.overload.php をご覧ください
マルチバイト文字の途中で分割せずにバイト長で文字列をトリムするには、次を使用できます。
mb_strcut(string $str, int $start [, int $length [, string $encoding ]] )
バイトサイズまたは文字列の長さですか?
バイトサイズは strlen()
で測定されますが、文字列の長さは mb_strlen()
を使用してクエリされます。 substr()
を使用して、文字列をXbytesにトリミングできます(マルチバイトがある場合、文字列が壊れることに注意してください)エンコーディング-コメントでDarhazerが指摘したように)およびmb_substr()
は、文字列のエンコーディングでX文字にトリミングします。
PHPの strlen()
関数は、ASCII文字の数を返します。
strlen('borsc')
-> 5(バイト)
strlen('boršč')
-> 7(バイト)
$limit_in_kBytes = 20000;
$pointer = 0;
while(strlen($your_string) > (($pointer + 1) * $limit_in_kBytes)){
$str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes);
// here you can handle (0 - n) parts of string
$pointer++;
}
$str_to_handle = substr($your_string, ($pointer * $limit_in_kBytes), $limit_in_kBytes);
// here you can handle last part of string
..または、次のような関数を使用できます。
function parseStrToArr($string, $limit_in_kBytes){
$ret = array();
$pointer = 0;
while(strlen($string) > (($pointer + 1) * $limit_in_kBytes)){
$ret[] = substr($string, ($pointer * $limit_in_kBytes ), $limit_in_kBytes);
$pointer++;
}
$ret[] = substr($string, ($pointer * $limit_in_kBytes), $limit_in_kBytes);
return $ret;
}
$arr = parseStrToArr($your_string, $limit_in_kBytes = 20000);
PhoneixSの答えに加えて、文字列の正しい長さをバイト単位で取得します-mb_strlen()
はstrlen()
よりも遅いため、最高のパフォーマンスを得るには、[mbstring.func_overload] ini設定をチェックしてmb_strlen()
は、本当に必要な場合にのみ使用されます。
$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);