mirror of
https://github.com/Icinga/icinga-php-thirdparty.git
synced 2025-08-19 00:28:34 +02:00
50 lines
2.5 KiB
Markdown
50 lines
2.5 KiB
Markdown
# php-mb-string
|
|
|
|
[](https://github.com/jfcherng/php-mb-string/actions)
|
|
[](https://packagist.org/packages/jfcherng/php-mb-string)
|
|
[](https://packagist.org/packages/jfcherng/php-mb-string)
|
|
[](https://github.com/jfcherng/php-mb-string/blob/master/LICENSE)
|
|
[](https://github.com/jfcherng/php-mb-string/stargazers)
|
|
[](https://www.paypal.me/jfcherng/5usd)
|
|
|
|
A high performance multibyte sting implementation for frequently reading/writing operations.
|
|
|
|
## Why I Write This Package?
|
|
|
|
Consider that you have a **LONG** multibyte string and
|
|
you want to do lots of following operations on it.
|
|
|
|
- Random reading/writing such as `$char = $str[5];` or `$str[5] = '許';`.
|
|
- Replacement such as `str_replace($search, $replace, $str);`.
|
|
- Insertion such as `substr_replace($insert, $str, $position, 0);`.
|
|
- Get substring such as `substr($str, $start, $length);`.
|
|
|
|
Because strings in PHP are not UTF-8, to do operations above safely,
|
|
you have to either use `mb_*()` functions or calculate the index by yourself.
|
|
Using `mb_*()` functions frequently can be a performance loss because it has
|
|
to re-decode the source string basing on the given encoding every time when you call it.
|
|
The longer the string is, the severer the problem becomes.
|
|
|
|
Instead, this class internally stores the string in its UTF-32 form,
|
|
which is fixed-width (1 char always occupies 4 bytes) so we are able to
|
|
perform speedy random accesses. With the power of random access, we could
|
|
use `str_*()` functions to do the job internally.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
composer require jfcherng/php-mb-string
|
|
```
|
|
|
|
## Example
|
|
|
|
See [tests/MbStringTest.php](https://github.com/jfcherng/php-mb-string/blob/master/tests/MbStringTest.php).
|
|
|
|
## Benchmark
|
|
|
|
See [benchmark/\_results.txt](https://github.com/jfcherng/php-mb-string/blob/master/benchmark/_results.txt).
|
|
|
|
## What Are You Doing With This Package?
|
|
|
|
I develop this for a PHP diff package, [jfcherng/php-diff](https://github.com/jfcherng/php-diff).
|