PHPackages                             hoa/string - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. hoa/string

AbandonedArchivedLibrary[Search &amp; Filtering](/categories/search)

hoa/string
==========

The Hoa\\String library.

2.16.01.11(10y ago)756.1k21BSD-3-ClausePHPPHP &lt;7

Since Sep 16Pushed 9y ago6 watchersCompare

[ Source](https://github.com/hoaproject/String)[ Packagist](https://packagist.org/packages/hoa/string)[ Docs](http://hoa-project.net/)[ RSS](/packages/hoa-string/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)Dependencies (2)Versions (12)Used By (1)

[![Hoa](https://camo.githubusercontent.com/b6460899aaa9a8910aa9331b036ef417b11c8f783d7c4de02a218d221fcae46e/687474703a2f2f7374617469632e686f612d70726f6a6563742e6e65742f496d6167652f486f615f736d616c6c2e706e67)](https://camo.githubusercontent.com/b6460899aaa9a8910aa9331b036ef417b11c8f783d7c4de02a218d221fcae46e/687474703a2f2f7374617469632e686f612d70726f6a6563742e6e65742f496d6167652f486f615f736d616c6c2e706e67)

Hoa is a **modular**, **extensible** and **structured** set of PHP libraries. Moreover, Hoa aims at being a bridge between industrial and research worlds.

Hoa\\String [![state](https://camo.githubusercontent.com/716153f5e572f3b1f7214add3f1bfca8303cbf20e90fbd3f7d8507d3d43c4ac9/687474703a2f2f63656e7472616c2e686f612d70726f6a6563742e6e65742f53746174652f537472696e67)](https://camo.githubusercontent.com/716153f5e572f3b1f7214add3f1bfca8303cbf20e90fbd3f7d8507d3d43c4ac9/687474703a2f2f63656e7472616c2e686f612d70726f6a6563742e6e65742f53746174652f537472696e67)
==============================================================================================================================================================================================================================================================================================================================================================================================================

[](#hoastring-)

This library allows to manipulate UTF-8 strings easily with some search algorithms.

Warning
-------

[](#warning)

This library is deprecated, and doesn't support `php >= 7` because of new reserved keyword `string`, please use [`Hoa\Ustring`](http://central.hoa-project.net/Resource/Library/Ustring).

Installation
------------

[](#installation)

With [Composer](http://getcomposer.org/), to include this library into your dependencies, you need to require [`hoa/string`](https://packagist.org/packages/hoa/string):

```
{
    "require": {
        "hoa/string": "~2.0"
    }
}
```

Please, read the website to [get more informations about how to install](http://hoa-project.net/Source.html).

Quick usage
-----------

[](#quick-usage)

We propose a quick overview of two usages: manipulate UTF-8 strings and one search algorithm.

### Natural UTF-8 strings manipulation

[](#natural-utf-8-strings-manipulation)

The `Hoa\String\String` class allows to manipulate easily UTF-8 strings in a very natural way. This class implements the `\ArrayAccess`, `\Countable` and `\IteratorAggregate` interfaces. We will use the following examples:

```
$french   = new Hoa\String\String('Je t\'aime');
$arabic   = new Hoa\String\String('أحبك');
$japanese = new Hoa\String\String('私はあなたを愛して');
```

To get the first character, we will do:

```
var_dump(
    $french[0],  // string(1) "J"
    $arabic[0],  // string(2) "أ"
    $japanese[0] // string(3) "私"
);
```

And to get the last character, we will do `[-1]`. It supports unbounded (and modulo) indexes.

We note that it cares about text **direction**. Look at `$arabic[0]`, it returns `أ` and not `ك`. To get the direction, we can use the `Hoa\String\String::getDirection` method (which call the `Hoa\String\String::getCharDirection` static method), it returns either `Hoa\String\String::LTR` (`0`) or `Hoa\String\String::RTL` (`1`):

```
var_dump(
    $french->getDirection(),  // int(0)
    $arabic->getDirection(),  // int(1)
    $japanese->getDirection() // int(0)
);
```

Text direction is also important for the `append`, `prepend`, `pad`… methods on `Hoa\String\String` for example.

To get the length of a string, we can use the `count` function:

```
var_dump(
    count($french),  // int(9)
    count($arabic),  // int(4)
    count($japanese) // int(9)
);
```

We are also able to iterate over the string:

```
foreach ($arabic as $letter) {
    var_dump($letter);
}

/**
 * Will output:
 *     string(2) "أ"
 *     string(2) "ح"
 *     string(2) "ب"
 *     string(2) "ك"
 */
```

Again, text direction is useful here. For `$arabic`, the iteration is done from right to left.

Some static methods are helpful, such as `fromCode`, `toCode` or `isUtf8` on `Hoa\String\String`:

```
var_dump(
    Hoa\String\String::fromCode(0x1a9), // string(2) "Ʃ"
    Hoa\String\String::toCode('Ʃ'),     // int(425) == 0x1a9
    Hoa\String\String::isUtf8('Ʃ')      // bool(true)
);
```

We can also transform any text into ASCII:

```
$emoji = new Hoa\String\String('I ❤ Unicode');
$maths = new Hoa\String\String('∀ i ∈ ℕ');

echo
    $emoji->toAscii(), "\n",
    $maths->toAscii(), "\n";

/**
 * Will output:
 *     I (heavy black heart) Unicode
 *     (for all) i (element of) N
 */
```

### Search algorithm

[](#search-algorithm)

The `Hoa\String\Search` implements search algorithms on strings.

For example, the `Hoa\String\Search::approximated` method make a search by approximated patterns (with *k* differences based upon the principle diagonal monotony). If we search the word `GATAA` in `CAGATAAGAGAA` with 1 difference, we will do:

```
$search = Hoa\String\Search::approximated(
    $haystack = 'CAGATAAGAGAA',
    $needle   = 'GATAA',
    $k        = 1
);
$solutions = array();

foreach ($search as $pos) {
    $solutions[] = substr($haystack, $pos['i'], $pos['l']);
}
```

We will found `AGATA`, `GATAA`, `ATAAG` and `GAGAA`.

The result is not very handy but the algorithm is much optimized and found many applications.

Documentation
-------------

[](#documentation)

Different documentations can be found on the website: .

License
-------

[](#license)

Hoa is under the New BSD License (BSD-3-Clause). Please, see [`LICENSE`](http://hoa-project.net/LICENSE).

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity34

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 95.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~48 days

Recently: every ~81 days

Total

11

Last Release

3781d ago

Major Versions

1.14.09.16 → 2.14.09.162014-09-17

### Community

Maintainers

![](https://www.gravatar.com/avatar/a410060743cec0e0d8654661b726a7a25f5888f18059d4c942a8fd9a8128f0da?d=identicon)[Hoa](/maintainers/Hoa)

---

Top Contributors

[![Hywan](https://avatars.githubusercontent.com/u/946104?v=4)](https://github.com/Hywan "Hywan (132 commits)")[![jubianchi](https://avatars.githubusercontent.com/u/327237?v=4)](https://github.com/jubianchi "jubianchi (1 commits)")[![flug](https://avatars.githubusercontent.com/u/1810304?v=4)](https://github.com/flug "flug (1 commits)")[![Metalaka](https://avatars.githubusercontent.com/u/5406767?v=4)](https://github.com/Metalaka "Metalaka (1 commits)")[![nicolas-grekas](https://avatars.githubusercontent.com/u/243674?v=4)](https://github.com/nicolas-grekas "nicolas-grekas (1 commits)")[![stephpy](https://avatars.githubusercontent.com/u/232744?v=4)](https://github.com/stephpy "stephpy (1 commits)")[![k-nenad](https://avatars.githubusercontent.com/u/1924166?v=4)](https://github.com/k-nenad "k-nenad (1 commits)")

---

Tags

searchstringunicodelibrary

### Embed Badge

![Health badge](/badges/hoa-string/health.svg)

```
[![Health](https://phpackages.com/badges/hoa-string/health.svg)](https://phpackages.com/packages/hoa-string)
```

###  Alternatives

[ilya/fuzzy

Nice PHP library for fuzzy string searching

4298.7k](/packages/ilya-fuzzy)[smile/module-elasticsuite-cms-search

Smile Elasticsuite - Cms Pages Search Module for Smile Elasticsuite.

25916.7k1](/packages/smile-module-elasticsuite-cms-search)[bvdputte/kirby-bettersearch

A search plugin for Kirby (v3+ that searches for full word combinations rather than just individual words.

233.5k](/packages/bvdputte-kirby-bettersearch)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
