文本

class Cake\Utility\Text

Text 类包含用于创建和操作字符串的便捷方法,通常以静态方式访问。示例:Text::uuid()

如果您需要 Cake\View\Helper\TextHelper 功能,但不在 View 中,请使用 Text 类。

namespace App\Controller;

use Cake\Utility\Text;

class UsersController extends AppController
{
    public function initialize(): void
    {
        parent::initialize();
        $this->loadComponent('Auth')
    };

    public function afterLogin()
    {
        $message = $this->Users->find('new_message')->first();
        if (!empty($message)) {
            // Notify user of new message
            $this->Flash->success(__(
                'You have a new message: {0}',
                Text::truncate($message['Message']['body'], 255, ['html' => true])
            ));
        }
    }
}

将字符串转换为 ASCII

static Cake\Utility\Text::transliterate($string, $transliteratorId = null)

默认情况下,transliterate 将提供的字符串中的所有字符转换为等效的 ASCII 字符。该方法需要 UTF-8 编码。字符转换可以使用您使用 $transliteratorId 参数传递的转换标识符进行控制,或者使用 Text::setTransliteratorId() 更改默认标识符字符串。ICU 转换标识符基本上是 <source script>:<target script> 形式的,并且您可以使用 ; 指定多个转换对。您可以在这里找到有关转换标识符的更多信息 这里

// apple puree
Text::transliterate('apple purée');

// Ubermensch (only latin characters are transliterated)
Text::transliterate('Übérmensch', 'Latin-ASCII;');

创建 URL 安全字符串

static Cake\Utility\Text::slug($string, $options = [])

Slug 将所有字符转换为 ASCII 版本,并将不匹配的字符和空格转换为连字符。slug 方法需要 UTF-8 编码。

您可以提供一个控制 slug 的选项数组。 $options 也可以是一个字符串,在这种情况下它将用作替换字符串。支持的选项是

  • replacement 替换字符串,默认为 ‘-‘。

  • transliteratorId 一个有效的转换标识符字符串。如果默认值 null Text::$_defaultTransliteratorId 将被使用。如果为 false,则不会进行任何转换,只会删除非单词。

  • preserve 要保留的特定非单词字符。默认为 null。例如,此选项可以设置为 ‘.’ 以生成干净的文件名

    // apple-puree
    Text::slug('apple purée');
    
    // apple_puree
    Text::slug('apple purée', '_');
    
    // foo-bar.tar.gz
    Text::slug('foo bar.tar.gz', ['preserve' => '.']);
    

生成 UUID

static Cake\Utility\Text::uuid

UUID 方法用于根据 RFC 4122 生成唯一标识符。UUID 是一个 128 位字符串,格式为 485fc381-e790-47a3-9794-1337c0a8fe68

Text::uuid(); // 485fc381-e790-47a3-9794-1337c0a8fe68

简单的字符串解析

static Cake\Utility\Text::tokenize($data, $separator = ', ', $leftBound = '(', $rightBound = ')')

使用 $separator 对字符串进行标记,忽略 $leftBound$rightBound 之间出现的 $separator 的任何实例。

此方法在拆分格式规则的(例如标签列表)数据时非常有用。

$data = "cakephp 'great framework' php";
$result = Text::tokenize($data, ' ', "'", "'");
// Result contains
['cakephp', "'great framework'", 'php'];
Cake\Utility\Text::parseFileSize(string $size, $default)

此方法将人类可读的字节大小的数字从格式化数字转换为以字节为单位的整数数字。

$int = Text::parseFileSize('2GB');

格式化字符串

static Cake\Utility\Text::insert($string, $data, $options = [])

insert 方法用于创建字符串模板并允许键值替换。

Text::insert(
    'My name is :name and I am :age years old.',
    ['name' => 'Bob', 'age' => '65']
);
// Returns: "My name is Bob and I am 65 years old."
static Cake\Utility\Text::cleanInsert($string, $options = [])

使用给定的 $options 清理 Text::insert 格式的字符串,具体取决于 $options 中的 ‘clean’ 键。使用的默认方法是 text,但 html 也可用。此函数的目标是替换所有空格和周围占位符的非必要标记,这些占位符没有被 Text::insert 替换。

您可以在选项数组中使用以下选项

$options = [
    'clean' => [
        'method' => 'text', // or html
    ],
    'before' => '',
    'after' => ''
];

换行文本

static Cake\Utility\Text::wrap($text, $options = [])

将文本块换行到设定的宽度,并缩进块。可以智能地换行文本,以便单词不会被切断在行上。

$text = 'This is the song that never ends.';
$result = Text::wrap($text, 22);

// Returns
This is the song that
never ends.

您可以提供一个控制换行方式的选项数组。支持的选项是

  • width 要换行的宽度。默认为 72。

  • wordWrap 是否要换行整个单词。默认为 true

  • indent 用于缩进行的字符。默认为 ‘'。

  • indentAt 开始缩进文本的行号。默认为 0。

static Cake\Utility\Text::wrapBlock($text, $options = [])

如果您需要确保即使有内部缩进,生成的块的总宽度也不会超过一定长度,则需要使用 wrapBlock() 而不是 wrap()。这对于生成控制台的文本特别有用。它接受与 wrap() 相同的选项

$text = 'This is the song that never ends. This is the song that never ends.';
$result = Text::wrapBlock($text, [
    'width' => 22,
    'indent' => ' → ',
    'indentAt' => 1
]);

// Returns
This is the song that
  never ends. This
  is the song that
  never ends.

突出显示子字符串

Cake\Utility\Text::highlight(string $haystack, string $needle, array $options = [])

突出显示 $needle$haystack 中,使用指定的 $options['format'] 字符串或默认字符串。

选项

  • format 字符串 - 包含将被突出显示的短语的 HTML 片段

  • html 布尔值 - 如果为 true,将忽略任何 HTML 标签,确保仅突出显示正确的文本

示例

// Called as TextHelper
echo $this->Text->highlight(
    $lastSentence,
    'using',
    ['format' => '<span class="highlight">\1</span>']
);

// Called as Text
use Cake\Utility\Text;

echo Text::highlight(
    $lastSentence,
    'using',
    ['format' => '<span class="highlight">\1</span>']
);

输出

截断文本

Cake\Utility\Text::truncate(string $text, int $length = 100, array $options)

如果 $text 长于 $length,则此方法将在 $length 处截断它,并添加一个后缀,该后缀包含 'ellipsis'(如果已定义)。如果 'exact' 被传递为 false,则截断将在超过 $length 的位置后的第一个空格处发生。如果 'html' 被传递为 true,则 HTML 标签将被尊重,不会被截断。

$options 用于传递所有额外的参数,默认情况下具有以下可能的键,所有这些键都是可选的

[
    'ellipsis' => '...',
    'exact' => true,
    'html' => false
]

示例

// Called as TextHelper
echo $this->Text->truncate(
    'The killer crept forward and tripped on the rug.',
    22,
    [
        'ellipsis' => '...',
        'exact' => false
    ]
);

// Called as Text
use Cake\Utility\Text;

echo Text::truncate(
    'The killer crept forward and tripped on the rug.',
    22,
    [
        'ellipsis' => '...',
        'exact' => false
    ]
);

输出

The killer crept...

截断字符串的尾部

Cake\Utility\Text::tail(string $text, int $length = 100, array $options)

如果 $text 长于 $length,则此方法会移除长度为差值的初始子字符串,并添加一个前缀,该前缀包含 'ellipsis'(如果已定义)。如果 'exact' 被传递为 false,则截断将在否则会发生截断的位置之前的第一个空格处发生。

$options 用于传递所有额外的参数,默认情况下具有以下可能的键,所有这些键都是可选的

[
    'ellipsis' => '...',
    'exact' => true
]

示例

$sampleText = 'I packed my bag and in it I put a PSP, a PS3, a TV, ' .
    'a C# program that can divide by zero, death metal t-shirts'

// Called as TextHelper
echo $this->Text->tail(
    $sampleText,
    70,
    [
        'ellipsis' => '...',
        'exact' => false
    ]
);

// Called as Text
use Cake\Utility\Text;

echo Text::tail(
    $sampleText,
    70,
    [
        'ellipsis' => '...',
        'exact' => false
    ]
);

输出

...a TV, a C# program that can divide by zero, death metal t-shirts

提取摘录

Cake\Utility\Text::excerpt(string $haystack, string $needle, integer $radius=100, string $ellipsis="...")

$haystack 中提取围绕 $needle 的摘录,每侧的字符数由 $radius 决定,并在前缀/后缀中使用 $ellipsis。此方法对于搜索结果特别有用。查询字符串或关键字可以在结果文档中显示。

// Called as TextHelper
echo $this->Text->excerpt($lastParagraph, 'method', 50, '...');

// Called as Text
use Cake\Utility\Text;

echo Text::excerpt($lastParagraph, 'method', 50, '...');

输出

... by $radius, and prefix/suffix with $ellipsis. This method is especially
handy for search results. The query...

将数组转换为句子形式

Cake\Utility\Text::toList(array $list, $and='and', $separator=', ')

创建一个逗号分隔的列表,其中最后两个项目用“and”连接。

$colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];

// Called as TextHelper
echo $this->Text->toList($colors);

// Called as Text
use Cake\Utility\Text;

echo Text::toList($colors);

输出

red, orange, yellow, green, blue, indigo and violet