>백엔드 개발 >PHP 튜토리얼 >단어 경계를 유지하면서 PHP에서 문자열을 어떻게 자를 수 있나요?

단어 경계를 유지하면서 PHP에서 문자열을 어떻게 자를 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-10 20:20:11284검색

How Can I Truncate Strings in PHP While Preserving Word Boundaries?

의미적 무결성 유지: 가장 가까운 단어 경계에서 문자열 자르기

프로그래밍에서 문자열을 다룰 때 특정 길이에 맞게 문자열을 잘라야 하는 경우가 많습니다. 그러나 순진하게 문자를 자르면 어색하거나 잘못된 결과가 발생할 수 있으며, 특히 단어 중간에 잘림이 발생하는 경우 더욱 그렇습니다.

PHP에는 의미적 무결성을 유지하면서 문자열을 자르는 몇 가지 옵션이 있습니다.

Wordwrap 및 Substring 사용

wordwrap 기능은 단어 경계를 존중하면서 문자열을 여러 줄로 나눌 수 있습니다. 최대 너비를 지정하면 원하는 길이 이전에 가장 가까운 단어에서 줄 바꿈을 만들 수 있습니다. 다음 코드 조각은 이 접근 방식을 보여줍니다.

$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
$desired_width = 200;

$truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n"));

이제 $truncated_string에는 원하는 텍스트가 포함되지만 200번째 문자 앞의 마지막 단어 끝까지만 포함됩니다.

Edge Cases 처리

이 접근 방식은 효과적이지만 원래 문자열이 원하는 너비보다 짧은 경우에는 처리되지 않습니다. 이 문제를 해결하려면 논리를 조건문으로 래핑할 수 있습니다.

if (strlen($string) > $desired_width) {
  $truncated_string = substr($string, 0, strpos(wordwrap($string, $desired_width), "\n"));
}

줄바꿈 처리

문자열에 원하는 잘림 지점 앞에 줄바꿈 문자가 포함되어 있으면 미묘한 문제가 발생합니다. 이러한 경우 단어 줄 바꿈 기능이 조기에 줄 바꿈을 생성할 수 있습니다. 이를 극복하기 위해 보다 정교한 정규식 기반 접근 방식을 사용할 수 있습니다.

function tokenTruncate($string, $desired_width) {
  $parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);
  $parts_count = count($parts);

  $length = 0;
  $last_part = 0;
  for (; $last_part < $parts_count; ++$last_part) {
    $length += strlen($parts[$last_part]);
    if ($length > $desired_width) { break; }
  }

  return implode(array_slice($parts, 0, $last_part));
}

이 함수는 단어 토큰을 반복하고 전체 길이가 원하는 너비를 초과하면 중지됩니다. 그런 다음 잘린 문자열을 다시 작성하여 단어 경계에서 끝나도록 합니다.

복잡성 테스트 및 처리

단위 테스트는 코드의 기능을 검증하는 데 중요합니다. 제공된 PHP PHPUnit 테스트 클래스는 tokenTruncate 함수의 올바른 동작을 보여줍니다.

'à'와 같은 특수 UTF8 문자는 추가 처리가 필요할 수 있습니다. 이는 정규식 끝에 'u'를 추가하여 달성할 수 있습니다.

$parts = preg_split('/([\s\n\r]+)/u', $string, null, PREG_SPLIT_DELIM_CAPTURE);

이러한 기술을 사용하면 PHP에서 문자열을 자신있게 잘라 의미적 무결성을 유지하고 미학적으로 만족스럽고 일관된 결과를 보장할 수 있습니다. .

위 내용은 단어 경계를 유지하면서 PHP에서 문자열을 어떻게 자를 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.