문자열 크기(바이트) 측정(php)
포털 부동산 피드를 하고 있는데 문자열의 최대 길이가 20,000바이트(20kb)여야 한다는 메시지가 뜨지만, 이런 경우는 처음입니다.
측정 방법bytea 크기varchar string그래서 저는 잠시 루프를 해서 그것을 다듬을 수 있습니다.
mb_strlen()을 사용하면 멀티바이트 또는 단일바이트 문자열에 대한 걱정 없이 바이트 문자만 있는 인코딩을 사용하여 바이트 길이를 가져올 수 있습니다.예를 들어 drake127이 mb_strlen의 코멘트에서 말한 것처럼 '8bit' 인코딩을 사용할 수 있습니다.
<?php
$string = 'Cién cañones por banda';
echo mb_strlen($string, '8bit');
?>
php는 실제로 mb_strlen을 호출하기 위해 strlen을 오버로드하는 옵션이 있기 때문에 strlen 함수를 사용하는 데 문제가 있을 수 있습니다.자세한 내용은 http://php.net/manual/en/mbstring.overload.php 에서 확인하십시오.
멀티바이트 문자 중간에 분할하지 않고 바이트 길이로 문자열을 트리밍하려면 다음을 사용할 수 있습니다.
mb_strcut(string $str, int $start [, int $length [, string $encoding ]] )
문자열이 아스키 인코딩인지 멀티바이트 형식으로 인코딩되었는지 확인해야 합니다.
전자의 경우에는 그냥strlen.
후자의 경우 문자당 바이트 수를 찾아야 합니다.
strlen 설명서는 방법의 예를 제공합니다. http://www.php.net/manual/en/function.strlen.php#72274
바이트 크기 또는 문자열 길이를 의미합니까?
바이트 크기는 로 측정되는 반면 문자열 길이는 를 사용하여 쿼리됩니다.사용할 수 있습니다.substr()문자열을 X바이트로 트리밍합니다(댓글에서 Darhazer가 지적한 대로 멀티바이트 인코딩이 있는 경우 문자열이 끊어집니다).mb_substr()문자열 인코딩에서 X자로 트리밍합니다.
PHP의 함수는 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_bullet" ini 설정을 사용하여mb_strlen()실제로 필요한 경우에만 사용됩니다.
$content_length = ini_get('mbstring.func_overload') ? mb_strlen($content , '8bit') : strlen($content);
언급URL : https://stackoverflow.com/questions/7568949/measure-string-size-in-bytes-in-php
'programing' 카테고리의 다른 글
| X509 저장소에서 모든 인증서를 검색하는 방법 (0) | 2023.08.13 |
|---|---|
| Multi Master용 Galera 클러스터:Ubuntu 16.04.4 x64에서 두 번째 노드 시작 실패 (0) | 2023.08.13 |
| aws에서 서버리스 배포 시 자동으로 기능 실행 (0) | 2023.08.13 |
| MariaDB10.4 - W10 머신, 슬레이브 1개 + 일반 독립형 DB 몇 개 - 방법? (0) | 2023.08.13 |
| 포트 바인딩에 도커에서 IPv4를 사용하도록 설정 (0) | 2023.08.13 |