PHP에서 문자열의 처음 n자를 어떻게 얻을 수 있습니까? 문자열을 특정 문자 수로 자르고 필요한 경우 '...'을 추가하는 가장 빠른 방법은 무엇입니까?
PHP에서 문자열의 처음 n자를 어떻게 얻을 수 있습니까? 문자열을 특정 문자 수로 자르고 필요한 경우 '...'을 추가하는 가장 빠른 방법은 무엇입니까?
답변:
//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';
최신 정보:
길이 확인 제안 및 트림 된 문자열과 트리밍되지 않은 문자열에서 유사한 길이 보장
$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;
따라서 최대 13 자의 문자열을 얻게됩니다. 13 자 이하의 일반 문자 또는 10 자 뒤에 '...'
업데이트 2 :
또는 기능으로 :
function truncate($string, $length, $dots = "...") {
return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}
업데이트 3 :
이 답변을 쓴 지 오래되었지만 실제로이 코드를 더 이상 사용하지 않습니다. 이 함수를 사용하여 단어 중간에 문자열을 끊는 것을 방지하는이 함수를 선호 wordwrap
합니다.
function truncate($string,$length=100,$append="…") {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
}
return $string;
}
$string = wordwrap($string, $length - sizeof($append));
?
이 기능은 버전 4.0.6부터 PHP에 내장되었습니다. 문서를 참조하십시오 .
echo mb_strimwidth('Hello World', 0, 10, '...');
// outputs Hello W...
있습니다 trimmarker
(위의 생략)가 절단 길이에 포함됩니다.
문자열 문자 집합을 제어해야하는 경우 멀티 바이트 확장이 유용 할 수 있습니다.
$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
$string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
때로는 문자열을 마지막 완성 단어로 제한해야합니다. 즉, 마지막 단어가 깨지는 것을 원하지 않고 대신 두 번째 마지막 단어로 중지합니다.
예 : "This is my String"을 6 자로 제한해야하지만 'This i ...'대신 'This ...'가 되길 원합니다. 즉, 마지막 단어에서 깨진 문자를 건너 뜁니다.
휴, 설명하기에 좋지 않습니다. 코드는 다음과 같습니다.
class Fun {
public function limit_text($text, $len) {
if (strlen($text) < $len) {
return $text;
}
$text_words = explode(' ', $text);
$out = null;
foreach ($text_words as $word) {
if ((strlen($word) > $len) && $out == null) {
return substr($word, 0, $len) . "...";
}
if ((strlen($out) + strlen($word)) > $len) {
return $out . "...";
}
$out.=" " . $word;
}
return $out;
}
}
단어를 나누지 않도록주의하면서 잘라내려면 다음을 수행하십시오.
function ellipse($str,$n_chars,$crop_str=' [...]')
{
$buff=strip_tags($str);
if(strlen($buff) > $n_chars)
{
$cut_index=strpos($buff,' ',$n_chars);
$buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
}
return $buff;
}
$ str이 $ n_chars보다 짧은 경우 그대로 유지합니다.
$ str이 $ n_chars와 같으면 그대로 반환합니다.
$ str이 $ n_chars보다 길면 다음에 잘라낼 공간을 찾거나 (끝까지 더 이상 공백이 없으면) $ str은 $ n_chars에서 무례하게 잘립니다.
참고 : 이 방법은 HTML의 경우 모든 태그를 제거합니다.
codeigniter 프레임 워크에는 "텍스트 헬퍼"라고하는 헬퍼가 포함되어 있습니다. 다음은 적용되는 codeigniter 사용 설명서의 일부 문서입니다. http://codeigniter.com/user_guide/helpers/text_helper.html (단어 _limiter 및 character_limiter 섹션을 읽으십시오). 귀하의 질문과 관련된 두 가지 기능이 있습니다.
if ( ! function_exists('word_limiter'))
{
function word_limiter($str, $limit = 100, $end_char = '…')
{
if (trim($str) == '')
{
return $str;
}
preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);
if (strlen($str) == strlen($matches[0]))
{
$end_char = '';
}
return rtrim($matches[0]).$end_char;
}
}
과
if ( ! function_exists('character_limiter'))
{
function character_limiter($str, $n = 500, $end_char = '…')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val.' ';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
}
}
}
}
내가 사용한 기능 :
function cutAfter($string, $len = 30, $append = '...') {
return (strlen($string) > $len) ?
substr($string, 0, $len - strlen($append)) . $append :
$string;
}
를 참조하십시오 행동 .
이 용도로 기능을 개발했습니다
function str_short($string,$limit)
{
$len=strlen($string);
if($len>$limit)
{
$to_sub=$len-$limit;
$crop_temp=substr($string,0,-$to_sub);
return $crop_len=$crop_temp."...";
}
else
{
return $string;
}
}
문자열을 사용하여 함수를 호출하고 제한
하십시오 str_short("hahahahahah",5)
. 예 : ;
문자열을 잘라 내고 끝에 "..."를 추가합니다
:)
함수 내에서 (반복 사용을 위해) 동적 길이를 제한하려면 다음을 사용하십시오.
function string_length_cutoff($string, $limit, $subtext = '...')
{
return (strlen($string) > $limit) ? substr($string, 0, ($limit-strlen(subtext))).$subtext : $string;
}
// example usage:
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26);
// or (for custom substitution text
echo string_length_cutoff('Michelle Lee Hammontree-Garcia', 26, '..');
코드를 추상화하는 것이 가장 좋습니다 (한도는 선택 사항이며 기본값은 10입니다).
print limit($string);
function limit($var, $limit=10)
{
if ( strlen($var) > $limit )
{
return substr($string, 0, $limit) . '...';
}
else
{
return $var;
}
}
$limit + 3
당신이 문자열을 잘라하지 않도록 단지 한도를 초과. 응용 프로그램 (예 : HTML 출력)에 따라 …
대신 엔터티 를 사용하는 것이 좋습니다 (인쇄 적으로 더 기쁘게). 앞에서 제안했듯이 줄임표를 추가하기 전에 줄이 짧아 진 문자열의 끝에서 문자가 아닌 문자를 잘라냅니다. 마지막으로 멀티 바이트 (예 : UTF-8) 환경에 있는지 확인하십시오. strlen () 및 substr ()을 사용할 수 없습니다.
이것이 가장 빠른 해결책인지 확실하지 않지만 가장 짧은 해결책 인 것 같습니다.
$result = current(explode("\n", wordwrap($str, $width, "...\n")));
추신 여기에 몇 가지 예를 참조 하십시오 https://stackoverflow.com/a/17852480/131337
이 솔루션은 단어를 자르지 않고 첫 번째 공백 뒤에 3 개의 점을 추가합니다. @ Raccoon29 솔루션을 편집 하고 아랍어와 같은 모든 언어에서 작동하도록 모든 기능을 mb_ 함수 로 대체했습니다.
function cut_string($str, $n_chars, $crop_str = '...') {
$buff = strip_tags($str);
if (mb_strlen($buff) > $n_chars) {
$cut_index = mb_strpos($buff, ' ', $n_chars);
$buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
}
return $buff;
}
$yourString = "bla blaaa bla blllla bla bla";
$out = "";
if(strlen($yourString) > 22) {
while(strlen($yourString) > 22) {
$pos = strrpos($yourString, " ");
if($pos !== false && $pos <= 22) {
$out = substr($yourString,0,$pos);
break;
} else {
$yourString = substr($yourString,0,$pos);
continue;
}
}
} else {
$out = $yourString;
}
echo "Output String: ".$out;
잘린 문자열의 길이에 대한 엄격한 요구 사항이 없으면이를 사용하여 마지막 단어를 자르고자를 수 있습니다.
$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";
// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);
// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));
// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
이 경우 $preview
입니다 "Knowledge is a natural right of every human being"
.
라이브 코드 예 : http://sandbox.onlinephpfunctions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713