Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/voku/Stringy

:accept: Stringy - A PHP string manipulation library with multibyte support, performance optimized
https://github.com/voku/Stringy

hacktoberfest php php7 string-manipulation stringify unicode unicode-characters

Last synced: 2 days ago
JSON representation

:accept: Stringy - A PHP string manipulation library with multibyte support, performance optimized

Awesome Lists containing this project

README

        

[//]: # (AUTO-GENERATED BY "PHP README Helper": base file -> docs/base.md)
[//]: # (AUTO-GENERATED BY "PHP README Helper": base file -> docs/base.md)
[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md)

[![Build Status](https://github.com/voku/Stringy/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/voku/Stringy/actions)
[![codecov.io](https://codecov.io/github/voku/Stringy/coverage.svg?branch=master)](https://codecov.io/github/voku/Stringy?branch=master)
[![Codacy Badge](https://api.codacy.com/project/badge/grade/97c46467e585467d884bac1130cb45e5)](https://www.codacy.com/app/voku/Stringy)
[![Latest Stable Version](https://poser.pugx.org/voku/stringy/v/stable)](https://packagist.org/packages/voku/stringy)
[![Total Downloads](https://poser.pugx.org/voku/stringy/downloads)](https://packagist.org/packages/voku/stringy)
[![License](https://poser.pugx.org/voku/stringy/license)](https://packagist.org/packages/voku/stringy)
[![Donate to this project using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/moelleken)
[![Donate to this project using Patreon](https://img.shields.io/badge/patreon-donate-yellow.svg)](https://www.patreon.com/voku)

## :accept: Stringy

A PHP string manipulation library with multibyte support. Compatible with PHP 7+

100% compatible with the original "[Stringy](https://github.com/danielstjules/Stringy)" library, but this fork is optimized
for performance and is using PHP 7+ features.

``` php
s('string')->toTitleCase()->ensureRight('y') == 'Stringy'
```

* [Why?](#why)
* [Alternative](#alternative)
* [Installation](#installation-via-composer-require)
* [OO and Chaining](#oo-and-chaining)
* [Implemented Interfaces](#implemented-interfaces)
* [PHP Class Call Creation](#php-class-call-creation)
* [Class methods](#class-methods)
* [create](#createmixed-str--encoding-)
* [Instance methods](#instance-methods)
* [Extensions](#extensions)
* [Tests](#tests)
* [License](#license)

## Why?

In part due to a lack of multibyte support (including UTF-8) across many of
PHP's standard string functions. But also to offer an OO wrapper around the
`mbstring` module's multibyte-compatible functions. Stringy handles some quirks,
provides additional functionality, and hopefully makes strings a little easier
to work with!

```php
// Standard library
strtoupper('fòôbàř'); // 'FòôBàř'
strlen('fòôbàř'); // 10

// mbstring
mb_strtoupper('fòôbàř'); // 'FÒÔBÀŘ'
mb_strlen('fòôbàř'); // '6'

// Stringy
$stringy = Stringy\Stringy::create('fòôbàř');
$stringy->toUpperCase(); // 'FÒÔBÀŘ'
$stringy->length(); // '6'
```

## Alternative

If you like a more Functional Way to edit strings, then you can take a look at [voku/portable-utf8](https://github.com/voku/portable-utf8), also "voku/Stringy" used the functions from the "Portable UTF-8"-Class but in a more Object Oriented Way.

```php
// Portable UTF-8
use voku\helper\UTF8;
UTF8::strtoupper('fòôbàř'); // 'FÒÔBÀŘ'
UTF8::strlen('fòôbàř'); // '6'
```

## Installation via "composer require"
```shell
composer require voku/stringy
```

## Installation via composer (manually)

If you're using Composer to manage dependencies, you can include the following
in your composer.json file:

```json
"require": {
"voku/stringy": "~6.0"
}
```

Then, after running `composer update` or `php composer.phar update`, you can
load the class using Composer's autoloading:

```php
require 'vendor/autoload.php';
```

Otherwise, you can simply require the file directly:

```php
require_once 'path/to/Stringy/src/Stringy.php';
```

And in either case, I'd suggest using an alias.

```php
use Stringy\Stringy as S;
```

## OO and Chaining

The library offers OO method chaining, as seen below:

```php
use Stringy\Stringy as S;
echo S::create('fòô bàř')->collapseWhitespace()->swapCase(); // 'FÒÔ BÀŘ'
```

`Stringy\Stringy` has a __toString() method, which returns the current string
when the object is used in a string context, ie:
`(string) S::create('foo') // 'foo'`

## Implemented Interfaces

`Stringy\Stringy` implements the `IteratorAggregate` interface, meaning that
`foreach` can be used with an instance of the class:

``` php
$stringy = S::create('fòôbàř');
foreach ($stringy as $char) {
echo $char;
}
// 'fòôbàř'
```

It implements the `Countable` interface, enabling the use of `count()` to
retrieve the number of characters in the string:

``` php
$stringy = S::create('fòô');
count($stringy); // 3
```

Furthermore, the `ArrayAccess` interface has been implemented. As a result,
`isset()` can be used to check if a character at a specific index exists. And
since `Stringy\Stringy` is immutable, any call to `offsetSet` or `offsetUnset`
will throw an exception. `offsetGet` has been implemented, however, and accepts
both positive and negative indexes. Invalid indexes result in an
`OutOfBoundsException`.

``` php
$stringy = S::create('bàř');
echo $stringy[2]; // 'ř'
echo $stringy[-2]; // 'à'
isset($stringy[-4]); // false

$stringy[3]; // OutOfBoundsException
$stringy[2] = 'a'; // Exception
```

## PHP Class Call Creation

As of PHP 5.6+, [`use function`](https://wiki.php.net/rfc/use_function) is
available for importing functions. Stringy exposes a namespaced function,
`Stringy\create`, which emits the same behaviour as `Stringy\Stringy::create()`.

``` php
use function Stringy\create as s;

// Instead of: S::create('fòô bàř')
s('fòô bàř')->collapseWhitespace()->swapCase();
```

## Class methods

##### create(mixed $str [, $encoding ])

Creates a Stringy object and assigns both str and encoding properties
the supplied values. $str is cast to a string prior to assignment, and if
$encoding is not specified, it defaults to mb_internal_encoding(). It
then returns the initialized object. Throws an InvalidArgumentException
if the first argument is an array or object without a __toString method.

```php
$stringy = S::create('fòôbàř', 'UTF-8'); // 'fòôbàř'
```

If you need a collection of Stringy objects you can use the S::collection()
method.

```php
$stringyCollection = \Stringy\collection(['fòôbàř', 'lall', 'öäü']);
```

## Instance Methods

Stringy objects are immutable. All examples below make use of PHP 5.6
function importing, and PHP 5.4 short array syntax. They also assume the
encoding returned by mb_internal_encoding() is UTF-8. For further details,
see the documentation for the create method above.

after
afterFirst
afterFirstIgnoreCase
afterLast
afterLastIgnoreCase
append
appendPassword
appendRandomString
appendStringy
appendUniqueIdentifier
at
base64Decode
base64Encode
bcrypt
before
beforeFirst
beforeFirstIgnoreCase
beforeLast
beforeLastIgnoreCase
between
callUserFunction
camelize
capitalizePersonalName
chars
chunk
chunkCollection
collapseWhitespace
contains
containsAll
containsAny
containsBom
count
countSubstr
crc32
create
crypt
dasherize
decrypt
delimit
encode
encrypt
endsWith
endsWithAny
ensureLeft
ensureRight
escape
explode
explodeCollection
extractIntegers
extractSpecialCharacters
extractText
first
format
getEncoding
getIterator
hardWrap
hasLowerCase
hasUpperCase
hash
hexDecode
hexEncode
htmlDecode
htmlEncode
humanize
in
indexOf
indexOfIgnoreCase
indexOfLast
indexOfLastIgnoreCase
insert
is
isAlpha
isAlphanumeric
isAscii
isBase64
isBinary
isBlank
isBom
isEmail
isEmpty
isEquals
isEqualsCaseInsensitive
isEqualsCaseSensitive
isHexadecimal
isHtml
isJson
isLowerCase
isNotEmpty
isNumeric
isPrintable
isPunctuation
isSerialized
isSimilar
isUpperCase
isUrl
isUtf8
isUtf16
isUtf32
isWhitespace
jsonSerialize
kebabCase
last
lastSubstringOf
lastSubstringOfIgnoreCase
length
lineWrap
lineWrapAfterWord
lines
linesCollection
longestCommonPrefix
longestCommonSubstring
longestCommonSuffix
lowerCaseFirst
matchCaseInsensitive
matchCaseSensitive
md5
newLineToHtmlBreak
nth
offsetExists
offsetGet
offsetSet
offsetUnset
pad
padBoth
padLeft
padRight
pascalCase
prepend
prependStringy
regexReplace
removeHtml
removeHtmlBreak
removeLeft
removeRight
removeXss
repeat
replace
replaceAll
replaceBeginning
replaceEnding
replaceFirst
replaceLast
reverse
safeTruncate
setInternalEncoding
sha1
sha256
sha512
shortenAfterWord
shuffle
similarity
slice
slugify
snakeCase
snakeize
softWrap
split
splitCollection
startsWith
startsWithAny
strip
stripWhitespace
stripeCssMediaQueries
stripeEmptyHtmlTags
studlyCase
substr
substring
substringOf
substringOfIgnoreCase
surround
swapCase
tidy
titleize
titleizeForHumans
toAscii
toBoolean
toLowerCase
toSpaces
toString
toTabs
toTitleCase
toTransliterate
toUpperCase
trim
trimLeft
trimRight
truncate
underscored
upperCamelize
upperCaseFirst
urlDecode
urlDecodeMulti
urlDecodeRaw
urlDecodeRawMulti
urlEncode
urlEncodeRaw
urlify
utf8ify
words
wordsCollection
wrap

## after(string $string): static

Return part of the string occurring after a specific string.

EXAMPLE:
s('宮本 茂')->after('本'); // ' 茂'

**Parameters:**
- `string $string

The delimiting string.

`

**Return:**
- `static`

--------

## afterFirst(string $separator): static

Gets the substring after the first occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->afterFirst('b'); // '>'

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## afterFirstIgnoreCase(string $separator): static

Gets the substring after the first occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->afterFirstIgnoreCase('b'); // '>'

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## afterLast(string $separator): static

Gets the substring after the last occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->afterLast('b'); // '>'

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## afterLastIgnoreCase(string $separator): static

Gets the substring after the last occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->afterLastIgnoreCase('b'); // '>'

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## append(string $suffix): static

Returns a new string with $suffix appended.

EXAMPLE:
s('fòô')->append('bàř'); // 'fòôbàř'

**Parameters:**
- `string ...$suffix

The string to append.

`

**Return:**
- `static

Object with appended $suffix.

`

--------

## appendPassword(int $length): static

Append an password (limited to chars that are good readable).

EXAMPLE:
s('')->appendPassword(8); // e.g.: '89bcdfgh'

**Parameters:**
- `int $length

Length of the random string.

`

**Return:**
- `static

Object with appended password.

`

--------

## appendRandomString(int $length, string $possibleChars): static

Append an random string.

EXAMPLE:
s('')->appendUniqueIdentifier(5, 'ABCDEFGHI'); // e.g.: 'CDEHI'

**Parameters:**
- `int $length

Length of the random string.

`
- `string $possibleChars [optional]

Characters string for the random selection.

`

**Return:**
- `static

Object with appended random string.

`

--------

## appendStringy(\CollectionStringy|static $suffix): static

Returns a new string with $suffix appended.

EXAMPLE:

**Parameters:**
- `CollectionStringy|static ...$suffix

The Stringy objects to append.

`

**Return:**
- `static

Object with appended $suffix.

`

--------

## appendUniqueIdentifier(int|string $entropyExtra, bool $md5): static

Append an unique identifier.

EXAMPLE:
s('')->appendUniqueIdentifier(); // e.g.: '1f3870be274f6c49b3e31a0c6728957f'

**Parameters:**
- `int|string $entropyExtra [optional]

Extra entropy via a string or int value.

`
- `bool $md5 [optional]

Return the unique identifier as md5-hash? Default: true

`

**Return:**
- `static

Object with appended unique identifier as md5-hash.

`

--------

## at(int $index): static

Returns the character at $index, with indexes starting at 0.

EXAMPLE:
s('fòôbàř')->at(3); // 'b'

**Parameters:**
- `int $index

Position of the character.

`

**Return:**
- `static

The character at $index.

`

--------

## base64Decode(): self

Decode the base64 encoded string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `self`

--------

## base64Encode(): self

Encode the string to base64.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `self`

--------

## bcrypt(int[]|string[] $options): static

Creates a hash from the string using the CRYPT_BLOWFISH algorithm.

WARNING: Using this algorithm, will result in the ```$this->str```
being truncated to a maximum length of 72 characters.

EXAMPLE:

**Parameters:**
- `array $options [optional]

An array of bcrypt hasing options.

`

**Return:**
- `static`

--------

## before(string $string): static

Return part of the string occurring before a specific string.

EXAMPLE:

**Parameters:**
- `string $string

The delimiting string.

`

**Return:**
- `static`

--------

## beforeFirst(string $separator): static

Gets the substring before the first occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->beforeFirst('b'); // ''

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## beforeFirstIgnoreCase(string $separator): static

Gets the substring before the first occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->beforeFirstIgnoreCase('b'); // ''

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## beforeLast(string $separator): static

Gets the substring before the last occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->beforeLast('b'); // ''

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## beforeLastIgnoreCase(string $separator): static

Gets the substring before the last occurrence of a separator.

If no match is found returns new empty Stringy object.

EXAMPLE:
s('')->beforeLastIgnoreCase('b'); // ''

**Parameters:**
- `string $separator`

**Return:**
- `static`

--------

## between(string $start, string $end, int $offset): static

Returns the substring between $start and $end, if found, or an empty
string. An optional offset may be supplied from which to begin the
search for the start string.

EXAMPLE:
s('{foo} and {bar}')->between('{', '}'); // 'foo'

**Parameters:**
- `string $start

Delimiter marking the start of the substring.

`
- `string $end

Delimiter marking the end of the substring.

`
- `int $offset [optional]

Index from which to begin the search. Default: 0

`

**Return:**
- `static

Object whose $str is a substring between $start and $end.

`

--------

## callUserFunction(callable $function, mixed $parameter): static

Call a user function.

EXAMPLE:
S::create('foo bar lall')->callUserFunction(static function ($str) {
return UTF8::str_limit($str, 8);
})->toString(); // "foo bar…"

**Parameters:**
- `callable $function`
- `mixed ...$parameter`

**Return:**
- `static

Object having a $str changed via $function.

`

--------

## camelize(): static

Returns a camelCase version of the string. Trims surrounding spaces,
capitalizes letters following digits, spaces, dashes and underscores,
and removes spaces, dashes, as well as underscores.

EXAMPLE:
s('Camel-Case')->camelize(); // 'camelCase'

**Parameters:**
__nothing__

**Return:**
- `static

Object with $str in camelCase.

`

--------

## capitalizePersonalName(): static

Returns the string with the first letter of each word capitalized,
except for when the word is a name which shouldn't be capitalized.

EXAMPLE:
s('jaap de hoop scheffer')->capitalizePersonName(); // 'Jaap de Hoop Scheffer'

**Parameters:**
__nothing__

**Return:**
- `static

Object with $str capitalized.

`

--------

## chars(): string[]

Returns an array consisting of the characters in the string.

EXAMPLE:
s('fòôbàř')->chars(); // ['f', 'ò', 'ô', 'b', 'à', 'ř']

**Parameters:**
__nothing__

**Return:**
- `string[]

An array of string chars.

`

--------

## chunk(int $length): static[]

Splits the string into chunks of Stringy objects.

EXAMPLE:
s('foobar')->chunk(3); // ['foo', 'bar']

**Parameters:**
- `int $length [optional]

Max character length of each array element.

`

**Return:**
- `static[]

An array of Stringy objects.

`

--------

## chunkCollection(int $length): CollectionStringy|static[]

Splits the string into chunks of Stringy objects collection.

EXAMPLE:

**Parameters:**
- `int $length [optional]

Max character length of each array element.

`

**Return:**
- `\CollectionStringy|static[]

An collection of Stringy objects.

`

--------

## collapseWhitespace(): static

Trims the string and replaces consecutive whitespace characters with a
single space. This includes tabs and newline characters, as well as
multibyte whitespace such as the thin space and ideographic space.

EXAMPLE:
s(' Ο συγγραφέας ')->collapseWhitespace(); // 'Ο συγγραφέας'

**Parameters:**
__nothing__

**Return:**
- `static

Object with a trimmed $str and condensed whitespace.

`

--------

## contains(string $needle, bool $caseSensitive): bool

Returns true if the string contains $needle, false otherwise. By default
the comparison is case-sensitive, but can be made insensitive by setting
$caseSensitive to false.

EXAMPLE:
s('Ο συγγραφέας είπε')->contains('συγγραφέας'); // true

**Parameters:**
- `string $needle

Substring to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str contains $needle.

`

--------

## containsAll(string[] $needles, bool $caseSensitive): bool

Returns true if the string contains all $needles, false otherwise. By
default the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.

EXAMPLE:
s('foo & bar')->containsAll(['foo', 'bar']); // true

**Parameters:**
- `string[] $needles

SubStrings to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str contains $needle.

`

--------

## containsAny(string[] $needles, bool $caseSensitive): bool

Returns true if the string contains any $needles, false otherwise. By
default the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.

EXAMPLE:
s('str contains foo')->containsAny(['foo', 'bar']); // true

**Parameters:**
- `string[] $needles

SubStrings to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str contains $needle.

`

--------

## containsBom(): bool

Checks if string starts with "BOM" (Byte Order Mark Character) character.

EXAMPLE: s("\xef\xbb\xbf foobar")->containsBom(); // true

**Parameters:**
__nothing__

**Return:**
- `bool true if the string has BOM at the start,

false otherwise`

--------

## count(): int

Returns the length of the string, implementing the countable interface.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `int

The number of characters in the string, given the encoding.

`

--------

## countSubstr(string $substring, bool $caseSensitive): int

Returns the number of occurrences of $substring in the given string.

By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.

EXAMPLE:
s('Ο συγγραφέας είπε')->countSubstr('α'); // 2

**Parameters:**
- `string $substring

The substring to search for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `int`

--------

## crc32(): int

Calculates the crc32 polynomial of a string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `int`

--------

## create(mixed $str, string $encoding): static

Creates a Stringy object and assigns both str and encoding properties
the supplied values. $str is cast to a string prior to assignment, and if
$encoding is not specified, it defaults to mb_internal_encoding(). It
then returns the initialized object. Throws an InvalidArgumentException
if the first argument is an array or object without a __toString method.

**Parameters:**
- `mixed $str [optional]

Value to modify, after being cast to string. Default: ''

`
- `string $encoding [optional]

The character encoding. Fallback: 'UTF-8'

`

**Return:**
- `static

A Stringy object.

`

--------

## crypt(string $salt): static

One-way string encryption (hashing).

Hash the string using the standard Unix DES-based algorithm or an
alternative algorithm that may be available on the system.

PS: if you need encrypt / decrypt, please use ```static::encrypt($password)```
and ```static::decrypt($password)```

EXAMPLE:

**Parameters:**
- `string $salt

A salt string to base the hashing on.

`

**Return:**
- `static`

--------

## dasherize(): static

Returns a lowercase and trimmed string separated by dashes. Dashes are
inserted before uppercase characters (with the exception of the first
character of the string), and in place of spaces as well as underscores.

EXAMPLE:
s('fooBar')->dasherize(); // 'foo-bar'

**Parameters:**
__nothing__

**Return:**
- `static

Object with a dasherized $str

`

--------

## decrypt(string $password): static

Decrypt the string.

EXAMPLE:

**Parameters:**
- `string $password The key for decrypting`

**Return:**
- `static`

--------

## delimit(string $delimiter): static

Returns a lowercase and trimmed string separated by the given delimiter.

Delimiters are inserted before uppercase characters (with the exception
of the first character of the string), and in place of spaces, dashes,
and underscores. Alpha delimiters are not converted to lowercase.

EXAMPLE:
s('fooBar')->delimit('::'); // 'foo::bar'

**Parameters:**
- `string $delimiter

Sequence used to separate parts of the string.

`

**Return:**
- `static

Object with a delimited $str.

`

--------

## encode(string $new_encoding, bool $auto_detect_encoding): static

Encode the given string into the given $encoding + set the internal character encoding.

EXAMPLE:

**Parameters:**
- `string $new_encoding

The desired character encoding.

`
- `bool $auto_detect_encoding [optional]

Auto-detect the current string-encoding

`

**Return:**
- `static`

--------

## encrypt(string $password): static

Encrypt the string.

EXAMPLE:

**Parameters:**
- `string $password

The key for encrypting

`

**Return:**
- `static`

--------

## endsWith(string $substring, bool $caseSensitive): bool

Returns true if the string ends with $substring, false otherwise. By
default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.

EXAMPLE:
s('fòôbàř')->endsWith('bàř', true); // true

**Parameters:**
- `string $substring

The substring to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str ends with $substring.

`

--------

## endsWithAny(string[] $substrings, bool $caseSensitive): bool

Returns true if the string ends with any of $substrings, false otherwise.

By default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.

EXAMPLE:
s('fòôbàř')->endsWithAny(['bàř', 'baz'], true); // true

**Parameters:**
- `string[] $substrings

Substrings to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str ends with $substring.

`

--------

## ensureLeft(string $substring): static

Ensures that the string begins with $substring. If it doesn't, it's
prepended.

EXAMPLE:
s('foobar')->ensureLeft('http://'); // 'http://foobar'

**Parameters:**
- `string $substring

The substring to add if not present.

`

**Return:**
- `static

Object with its $str prefixed by the $substring.

`

--------

## ensureRight(string $substring): static

Ensures that the string ends with $substring. If it doesn't, it's appended.

EXAMPLE:
s('foobar')->ensureRight('.com'); // 'foobar.com'

**Parameters:**
- `string $substring

The substring to add if not present.

`

**Return:**
- `static

Object with its $str suffixed by the $substring.

`

--------

## escape(): static

Create a escape html version of the string via "htmlspecialchars()".

EXAMPLE:
s('<∂∆ onerror="alert(xss)">')->escape(); // '<∂∆ onerror="alert(xss)">'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## explode(string $delimiter, int $limit): array

Split a string by a string.

EXAMPLE:

**Parameters:**
- `string $delimiter

The boundary string

`
- `int $limit [optional]

The maximum number of elements in the exploded
collection.

- If limit is set and positive, the returned collection will contain a maximum of limit elements with the last
element containing the rest of string.
- If the limit parameter is negative, all components except the last -limit are returned.
- If the limit parameter is zero, then this is treated as 1`

**Return:**
- `array`

--------

## explodeCollection(string $delimiter, int $limit): CollectionStringy|static[]

Split a string by a string.

EXAMPLE:

**Parameters:**
- `string $delimiter

The boundary string

`
- `int $limit [optional]

The maximum number of elements in the exploded
collection.

- If limit is set and positive, the returned collection will contain a maximum of limit elements with the last
element containing the rest of string.
- If the limit parameter is negative, all components except the last -limit are returned.
- If the limit parameter is zero, then this is treated as 1`

**Return:**
- `\CollectionStringy|static[]

An collection of Stringy objects.

`

--------

## extractIntegers(): static

Returns the integer value of the current string.

EXAMPLE:
s('foo1 ba2r')->extractIntegers(); // '12'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## extractSpecialCharacters(): static

Returns the special chars of the current string.

EXAMPLE:
s('foo1 ba2!r')->extractSpecialCharacters(); // '!'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## extractText(string $search, int|null $length, string $replacerForSkippedText): static

Create an extract from a sentence, so if the search-string was found, it try to centered in the output.

EXAMPLE:
$sentence = 'This is only a Fork of Stringy, take a look at the new features.';
s($sentence)->extractText('Stringy'); // '...Fork of Stringy...'

**Parameters:**
- `string $search`
- `int|null $length [optional]

Default: null === text->length / 2

`
- `string $replacerForSkippedText [optional]

Default: …

`

**Return:**
- `static`

--------

## first(int $n): static

Returns the first $n characters of the string.

EXAMPLE:
s('fòôbàř')->first(3); // 'fòô'

**Parameters:**
- `int $n

Number of characters to retrieve from the start.

`

**Return:**
- `static

Object with its $str being the first $n chars.

`

--------

## format(mixed $args): static

Return a formatted string via sprintf + named parameters via array syntax.




It will use "sprintf()" so you can use e.g.:



s('There are %d monkeys in the %s')->format(5, 'tree');




s('There are %2$d monkeys in the %1$s')->format('tree', 5);





But you can also use named parameter via array syntax e.g.:



s('There are %:count monkeys in the %:location')->format(['count' => 5, 'location' => 'tree');

EXAMPLE:
$input = 'one: %2$d, %1$s: 2, %:text_three: %3$d';
s($input)->format(['text_three' => '%4$s'], 'two', 1, 3, 'three'); // 'One: 1, two: 2, three: 3'

**Parameters:**
- `mixed ...$args [optional]`

**Return:**
- `static

A Stringy object produced according to the formatting string
format.

`

--------

## getEncoding(): string

Returns the encoding used by the Stringy object.

EXAMPLE:
s('fòôbàř', 'UTF-8')->getEncoding(); // 'UTF-8'

**Parameters:**
__nothing__

**Return:**
- `string

The current value of the $encoding property.

`

--------

## getIterator(): ArrayIterator

Returns a new ArrayIterator, thus implementing the IteratorAggregate
interface. The ArrayIterator's constructor is passed an array of chars
in the multibyte string. This enables the use of foreach with instances
of Stringy\Stringy.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `\ArrayIterator

An iterator for the characters in the string.

`

--------

## hardWrap(int $width, string $break): static

Wrap the string after an exact number of characters.

EXAMPLE:

**Parameters:**
- `int $width

Number of characters at which to wrap.

`
- `string $break [optional]

Character used to break the string. | Default: "\n"

`

**Return:**
- `static`

--------

## hasLowerCase(): bool

Returns true if the string contains a lower case char, false otherwise

EXAMPLE:
s('fòôbàř')->hasLowerCase(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not the string contains a lower case character.

`

--------

## hasUpperCase(): bool

Returns true if the string contains an upper case char, false otherwise.

EXAMPLE:
s('fòôbàř')->hasUpperCase(); // false

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not the string contains an upper case character.

`

--------

## hash(string $algorithm): static

Generate a hash value (message digest).

EXAMPLE:

**Parameters:**
- `string $algorithm

Name of selected hashing algorithm (i.e. "md5", "sha256", "haval160,4", etc..)

`

**Return:**
- `static`

--------

## hexDecode(): static

Decode the string from hex.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## hexEncode(): static

Encode string to hex.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## htmlDecode(int $flags): static

Convert all HTML entities to their applicable characters.

EXAMPLE:
s('&')->htmlDecode(); // '&'

**Parameters:**
- `int $flags [optional]


A bitmask of one or more of the following flags, which specify how to handle quotes and
which document type to use. The default is ENT_COMPAT.


Available flags constants

Constant Name
Description

ENT_COMPAT
Will convert double-quotes and leave single-quotes alone.

ENT_QUOTES
Will convert both double and single quotes.

ENT_NOQUOTES
Will leave both double and single quotes unconverted.

ENT_HTML401

Handle code as HTML 4.01.

ENT_XML1

Handle code as XML 1.

ENT_XHTML

Handle code as XHTML.

ENT_HTML5

Handle code as HTML 5.

`

**Return:**
- `static

Object with the resulting $str after being html decoded.

`

--------

## htmlEncode(int $flags): static

Convert all applicable characters to HTML entities.

EXAMPLE:
s('&')->htmlEncode(); // '&'

**Parameters:**
- `int $flags [optional]


A bitmask of one or more of the following flags, which specify how to handle quotes and
which document type to use. The default is ENT_COMPAT.


Available flags constants

Constant Name
Description

ENT_COMPAT
Will convert double-quotes and leave single-quotes alone.

ENT_QUOTES
Will convert both double and single quotes.

ENT_NOQUOTES
Will leave both double and single quotes unconverted.

ENT_HTML401

Handle code as HTML 4.01.

ENT_XML1

Handle code as XML 1.

ENT_XHTML

Handle code as XHTML.

ENT_HTML5

Handle code as HTML 5.

`

**Return:**
- `static

Object with the resulting $str after being html encoded.

`

--------

## humanize(): static

Capitalizes the first word of the string, replaces underscores with
spaces, and strips '_id'.

EXAMPLE:
s('author_id')->humanize(); // 'Author'

**Parameters:**
__nothing__

**Return:**
- `static

Object with a humanized $str.

`

--------

## in(string $str, bool $caseSensitive): bool

Determine if the current string exists in another string. By
default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.

EXAMPLE:

**Parameters:**
- `string $str

The string to compare against.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool`

--------

## indexOf(string $needle, int $offset): false|int

Returns the index of the first occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search.

EXAMPLE:
s('string')->indexOf('ing'); // 3

**Parameters:**
- `string $needle

Substring to look for.

`
- `int $offset [optional]

Offset from which to search. Default: 0

`

**Return:**
- `false|int

The occurrence's index if found, otherwise false.

`

--------

## indexOfIgnoreCase(string $needle, int $offset): false|int

Returns the index of the first occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search.

EXAMPLE:
s('string')->indexOfIgnoreCase('ING'); // 3

**Parameters:**
- `string $needle

Substring to look for.

`
- `int $offset [optional]

Offset from which to search. Default: 0

`

**Return:**
- `false|int

The occurrence's index if found, otherwise false.

`

--------

## indexOfLast(string $needle, int $offset): false|int

Returns the index of the last occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search. Offsets may be negative to count from the last character
in the string.

EXAMPLE:
s('foobarfoo')->indexOfLast('foo'); // 10

**Parameters:**
- `string $needle

Substring to look for.

`
- `int $offset [optional]

Offset from which to search. Default: 0

`

**Return:**
- `false|int

The last occurrence's index if found, otherwise false.

`

--------

## indexOfLastIgnoreCase(string $needle, int $offset): false|int

Returns the index of the last occurrence of $needle in the string,
and false if not found. Accepts an optional offset from which to begin
the search. Offsets may be negative to count from the last character
in the string.

EXAMPLE:
s('fooBarFoo')->indexOfLastIgnoreCase('foo'); // 10

**Parameters:**
- `string $needle

Substring to look for.

`
- `int $offset [optional]

Offset from which to search. Default: 0

`

**Return:**
- `false|int

The last occurrence's index if found, otherwise false.

`

--------

## insert(string $substring, int $index): static

Inserts $substring into the string at the $index provided.

EXAMPLE:
s('fòôbř')->insert('à', 4); // 'fòôbàř'

**Parameters:**
- `string $substring

String to be inserted.

`
- `int $index

The index at which to insert the substring.

`

**Return:**
- `static

Object with the resulting $str after the insertion.

`

--------

## is(string $pattern): bool

Returns true if the string contains the $pattern, otherwise false.

WARNING: Asterisks ("*") are translated into (".*") zero-or-more regular
expression wildcards.

EXAMPLE:
s('Foo\\Bar\\Lall')->is('*\\Bar\\*'); // true

**Parameters:**
- `string $pattern

The string or pattern to match against.

`

**Return:**
- `bool

Whether or not we match the provided pattern.

`

--------

## isAlpha(): bool

Returns true if the string contains only alphabetic chars, false otherwise.

EXAMPLE:
s('丹尼爾')->isAlpha(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only alphabetic chars.

`

--------

## isAlphanumeric(): bool

Returns true if the string contains only alphabetic and numeric chars, false otherwise.

EXAMPLE:
s('دانيال1')->isAlphanumeric(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only alphanumeric chars.

`

--------

## isAscii(): bool

Checks if a string is 7 bit ASCII.

EXAMPLE: s('白')->isAscii; // false

**Parameters:**
__nothing__

**Return:**
- `bool


true if it is ASCII

false otherwise

`

--------

## isBase64(bool $emptyStringIsValid): bool

Returns true if the string is base64 encoded, false otherwise.

EXAMPLE:
s('Zm9vYmFy')->isBase64(); // true

**Parameters:**
- `bool $emptyStringIsValid`

**Return:**
- `bool

Whether or not $str is base64 encoded.

`

--------

## isBinary(): bool

Check if the input is binary... (is look like a hack).

EXAMPLE: s(01)->isBinary(); // true

**Parameters:**
__nothing__

**Return:**
- `bool`

--------

## isBlank(): bool

Returns true if the string contains only whitespace chars, false otherwise.

EXAMPLE:
s("\n\t \v\f")->isBlank(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only whitespace characters.

`

--------

## isBom(): bool

Checks if the given string is equal to any "Byte Order Mark".

WARNING: Use "s::string_has_bom()" if you will check BOM in a string.

EXAMPLE: s->("\xef\xbb\xbf")->isBom(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

true if the $utf8_chr is Byte Order Mark, false otherwise.

`

--------

## isEmail(bool $useExampleDomainCheck, bool $useTypoInDomainCheck, bool $useTemporaryDomainCheck, bool $useDnsCheck): bool

Returns true if the string contains a valid E-Mail address, false otherwise.

EXAMPLE:
s('[email protected]')->isEmail(); // true

**Parameters:**
- `bool $useExampleDomainCheck [optional]

Default: false

`
- `bool $useTypoInDomainCheck [optional]

Default: false

`
- `bool $useTemporaryDomainCheck [optional]

Default: false

`
- `bool $useDnsCheck [optional]

Default: false

`

**Return:**
- `bool

Whether or not $str contains a valid E-Mail address.

`

--------

## isEmpty(): bool

Determine whether the string is considered to be empty.

A variable is considered empty if it does not exist or if its value equals FALSE.

EXAMPLE:
s('')->isEmpty(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str is empty().

`

--------

## isEquals(string|\Stringy $str): bool

Determine whether the string is equals to $str.

Alias for isEqualsCaseSensitive()

EXAMPLE:
s('foo')->isEquals('foo'); // true

**Parameters:**
- `string|\Stringy ...$str`

**Return:**
- `bool`

--------

## isEqualsCaseInsensitive(float|int|string|\Stringy $str): bool

Determine whether the string is equals to $str.

EXAMPLE:

**Parameters:**
- `float|int|string|\Stringy ...$str

The string to compare.

`

**Return:**
- `bool

Whether or not $str is equals.

`

--------

## isEqualsCaseSensitive(float|int|string|\Stringy $str): bool

Determine whether the string is equals to $str.

EXAMPLE:

**Parameters:**
- `float|int|string|\Stringy ...$str

The string to compare.

`

**Return:**
- `bool

Whether or not $str is equals.

`

--------

## isHexadecimal(): bool

Returns true if the string contains only hexadecimal chars, false otherwise.

EXAMPLE:
s('A102F')->isHexadecimal(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only hexadecimal chars.

`

--------

## isHtml(): bool

Returns true if the string contains HTML-Tags, false otherwise.

EXAMPLE:
s('

foo

')->isHtml(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains HTML-Tags.

`

--------

## isJson(bool $onlyArrayOrObjectResultsAreValid): bool

Returns true if the string is JSON, false otherwise. Unlike json_decode
in PHP 5.x, this method is consistent with PHP 7 and other JSON parsers,
in that an empty string is not considered valid JSON.

EXAMPLE:
s('{"foo":"bar"}')->isJson(); // true

**Parameters:**
- `bool $onlyArrayOrObjectResultsAreValid`

**Return:**
- `bool

Whether or not $str is JSON.

`

--------

## isLowerCase(): bool

Returns true if the string contains only lower case chars, false otherwise.

EXAMPLE:
s('fòôbàř')->isLowerCase(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only lower case characters.

`

--------

## isNotEmpty(): bool

Determine whether the string is considered to be NOT empty.

A variable is considered NOT empty if it does exist or if its value equals TRUE.

EXAMPLE:
s('')->isNotEmpty(); // false

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str is empty().

`

--------

## isNumeric(): bool

Determine if the string is composed of numeric characters.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `bool`

--------

## isPrintable(): bool

Determine if the string is composed of printable (non-invisible) characters.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `bool`

--------

## isPunctuation(): bool

Determine if the string is composed of punctuation characters.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `bool`

--------

## isSerialized(): bool

Returns true if the string is serialized, false otherwise.

EXAMPLE:
s('a:1:{s:3:"foo";s:3:"bar";}')->isSerialized(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str is serialized.

`

--------

## isSimilar(string $str, float $minPercentForSimilarity): bool

Check if two strings are similar.

EXAMPLE:

**Parameters:**
- `string $str

The string to compare against.

`
- `float $minPercentForSimilarity [optional]

The percentage of needed similarity. | Default: 80%

`

**Return:**
- `bool`

--------

## isUpperCase(): bool

Returns true if the string contains only lower case chars, false
otherwise.

EXAMPLE:
s('FÒÔBÀŘ')->isUpperCase(); // true

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only lower case characters.

`

--------

## isUrl(bool $disallow_localhost): bool

/**
Check if $url is an correct url.

**Parameters:**
- `bool $disallow_localhost`

**Return:**
- `bool`

--------

## isUtf8(bool $strict): bool

Checks whether the passed input contains only byte sequences that appear valid UTF-8.

EXAMPLE:
s('Iñtërnâtiônàlizætiøn')->isUtf8(); // true
//
s("Iñtërnâtiônàlizætiøn\xA0\xA1")->isUtf8(); // false

**Parameters:**
- `bool $strict

Check also if the string is not UTF-16 or UTF-32.

`

**Return:**
- `bool`

--------

## isUtf16(): false|int

Check if the string is UTF-16.

**Parameters:**
__nothing__

**Return:**
- `false|int false if is't not UTF-16,

1 for UTF-16LE,

2 for UTF-16BE`

--------

## isUtf32(): false|int

Check if the string is UTF-32.

**Parameters:**
__nothing__

**Return:**
- `false|int false if is't not UTF-32,

1 for UTF-32LE,

2 for UTF-32BE`

--------

## isWhitespace(): bool

Returns true if the string contains only whitespace chars, false otherwise.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `bool

Whether or not $str contains only whitespace characters.

`

--------

## jsonSerialize(): string

Returns value which can be serialized by json_encode().

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `string The current value of the $str property`

--------

## kebabCase(): static

Convert the string to kebab-case.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## last(int $n): static

Returns the last $n characters of the string.

EXAMPLE:
s('fòôbàř')->last(3); // 'bàř'

**Parameters:**
- `int $n

Number of characters to retrieve from the end.

`

**Return:**
- `static

Object with its $str being the last $n chars.

`

--------

## lastSubstringOf(string $needle, bool $beforeNeedle): static

Gets the substring after (or before via "$beforeNeedle") the last occurrence of the "$needle".

If no match is found returns new empty Stringy object.

EXAMPLE:

**Parameters:**
- `string $needle

The string to look for.

`
- `bool $beforeNeedle [optional]

Default: false

`

**Return:**
- `static`

--------

## lastSubstringOfIgnoreCase(string $needle, bool $beforeNeedle): static

Gets the substring after (or before via "$beforeNeedle") the last occurrence of the "$needle".

If no match is found returns new empty Stringy object.

EXAMPLE:

**Parameters:**
- `string $needle

The string to look for.

`
- `bool $beforeNeedle [optional]

Default: false

`

**Return:**
- `static`

--------

## length(): int

Returns the length of the string.

EXAMPLE:
s('fòôbàř')->length(); // 6

**Parameters:**
__nothing__

**Return:**
- `int

The number of characters in $str given the encoding.

`

--------

## lineWrap(int $limit, string $break, bool $add_final_break, string|null $delimiter): static

Line-Wrap the string after $limit, but also after the next word.

EXAMPLE:

**Parameters:**
- `int $limit [optional]

The column width.

`
- `string $break [optional]

The line is broken using the optional break parameter.

`
- `bool $add_final_break [optional]


If this flag is true, then the method will add a $break at the end
of the result string.

`
- `string|null $delimiter [optional]


You can change the default behavior, where we split the string by newline.

`

**Return:**
- `static`

--------

## lineWrapAfterWord(int $limit, string $break, bool $add_final_break, string|null $delimiter): static

Line-Wrap the string after $limit, but also after the next word.

EXAMPLE:

**Parameters:**
- `int $limit [optional]

The column width.

`
- `string $break [optional]

The line is broken using the optional break parameter.

`
- `bool $add_final_break [optional]


If this flag is true, then the method will add a $break at the end
of the result string.

`
- `string|null $delimiter [optional]


You can change the default behavior, where we split the string by newline.

`

**Return:**
- `static`

--------

## lines(): static[]

Splits on newlines and carriage returns, returning an array of Stringy
objects corresponding to the lines in the string.

EXAMPLE:
s("fòô\r\nbàř\n")->lines(); // ['fòô', 'bàř', '']

**Parameters:**
__nothing__

**Return:**
- `static[]

An array of Stringy objects.

`

--------

## linesCollection(): CollectionStringy|static[]

Splits on newlines and carriage returns, returning an array of Stringy
objects corresponding to the lines in the string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `\CollectionStringy|static[]

An collection of Stringy objects.

`

--------

## longestCommonPrefix(string $otherStr): static

Returns the longest common prefix between the string and $otherStr.

EXAMPLE:
s('foobar')->longestCommonPrefix('foobaz'); // 'fooba'

**Parameters:**
- `string $otherStr

Second string for comparison.

`

**Return:**
- `static

Object with its $str being the longest common prefix.

`

--------

## longestCommonSubstring(string $otherStr): static

Returns the longest common substring between the string and $otherStr.

In the case of ties, it returns that which occurs first.

EXAMPLE:
s('foobar')->longestCommonSubstring('boofar'); // 'oo'

**Parameters:**
- `string $otherStr

Second string for comparison.

`

**Return:**
- `static

Object with its $str being the longest common substring.

`

--------

## longestCommonSuffix(string $otherStr): static

Returns the longest common suffix between the string and $otherStr.

EXAMPLE:
s('fòôbàř')->longestCommonSuffix('fòrbàř'); // 'bàř'

**Parameters:**
- `string $otherStr

Second string for comparison.

`

**Return:**
- `static

Object with its $str being the longest common suffix.

`

--------

## lowerCaseFirst(): static

Converts the first character of the string to lower case.

EXAMPLE:
s('Σ Foo')->lowerCaseFirst(); // 'σ Foo'

**Parameters:**
__nothing__

**Return:**
- `static

Object with the first character of $str being lower case.

`

--------

## matchCaseInsensitive(string|\Stringy $str): bool

Determine if the string matches another string regardless of case.

Alias for isEqualsCaseInsensitive()

EXAMPLE:

**Parameters:**
- `string|\Stringy ...$str

The string to compare against.

`

**Return:**
- `bool`

--------

## matchCaseSensitive(string|\Stringy $str): bool

Determine if the string matches another string.

Alias for isEqualsCaseSensitive()

EXAMPLE:

**Parameters:**
- `string|\Stringy ...$str

The string to compare against.

`

**Return:**
- `bool`

--------

## md5(): static

Create a md5 hash from the current string.

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## newLineToHtmlBreak(): static

Replace all breaks [
| \r\n | \r | \n | ...] into "
".

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## nth(int $step, int $offset): static

Get every nth character of the string.

EXAMPLE:

**Parameters:**
- `int $step

The number of characters to step.

`
- `int $offset [optional]

The string offset to start at.

`

**Return:**
- `static`

--------

## offsetExists(int $offset): bool

Returns whether or not a character exists at an index. Offsets may be
negative to count from the last character in the string. Implements
part of the ArrayAccess interface.

EXAMPLE:

**Parameters:**
- `int $offset

The index to check.

`

**Return:**
- `bool

Whether or not the index exists.

`

--------

## offsetGet(int $offset): string

Returns the character at the given index. Offsets may be negative to
count from the last character in the string. Implements part of the
ArrayAccess interface, and throws an OutOfBoundsException if the index
does not exist.

EXAMPLE:

**Parameters:**
- `int $offset

The index from which to retrieve the char.

`

**Return:**
- `string

The character at the specified index.

`

--------

## offsetSet(int $offset, mixed $value): void

Implements part of the ArrayAccess interface, but throws an exception
when called. This maintains the immutability of Stringy objects.

EXAMPLE:

**Parameters:**
- `int $offset

The index of the character.

`
- `mixed $value

Value to set.

`

**Return:**
- `void`

--------

## offsetUnset(int $offset): void

Implements part of the ArrayAccess interface, but throws an exception
when called. This maintains the immutability of Stringy objects.

EXAMPLE:

**Parameters:**
- `int $offset

The index of the character.

`

**Return:**
- `void`

--------

## pad(int $length, string $padStr, string $padType): static

Pads the string to a given length with $padStr. If length is less than
or equal to the length of the string, no padding takes places. The
default string used for padding is a space, and the default type (one of
'left', 'right', 'both') is 'right'. Throws an InvalidArgumentException
if $padType isn't one of those 3 values.

EXAMPLE:
s('fòôbàř')->pad(9, '-/', 'left'); // '-/-fòôbàř'

**Parameters:**
- `int $length

Desired string length after padding.

`
- `string $padStr [optional]

String used to pad, defaults to space. Default: ' '

`
- `string $padType [optional]

One of 'left', 'right', 'both'. Default: 'right'

`

**Return:**
- `static

Object with a padded $str.

`

--------

## padBoth(int $length, string $padStr): static

Returns a new string of a given length such that both sides of the
string are padded. Alias for pad() with a $padType of 'both'.

EXAMPLE:
s('foo bar')->padBoth(9, ' '); // ' foo bar '

**Parameters:**
- `int $length

Desired string length after padding.

`
- `string $padStr [optional]

String used to pad, defaults to space. Default: ' '

`

**Return:**
- `static

String with padding applied.

`

--------

## padLeft(int $length, string $padStr): static

Returns a new string of a given length such that the beginning of the
string is padded. Alias for pad() with a $padType of 'left'.

EXAMPLE:
s('foo bar')->padLeft(9, ' '); // ' foo bar'

**Parameters:**
- `int $length

Desired string length after padding.

`
- `string $padStr [optional]

String used to pad, defaults to space. Default: ' '

`

**Return:**
- `static

String with left padding.

`

--------

## padRight(int $length, string $padStr): static

Returns a new string of a given length such that the end of the string
is padded. Alias for pad() with a $padType of 'right'.

EXAMPLE:
s('foo bar')->padRight(10, '_*'); // 'foo bar_*_'

**Parameters:**
- `int $length

Desired string length after padding.

`
- `string $padStr [optional]

String used to pad, defaults to space. Default: ' '

`

**Return:**
- `static

String with right padding.

`

--------

## pascalCase(): static

Convert the string to PascalCase.

Alias for studlyCase()

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## prepend(string $prefix): static

Returns a new string starting with $prefix.

EXAMPLE:
s('bàř')->prepend('fòô'); // 'fòôbàř'

**Parameters:**
- `string ...$prefix

The string to append.

`

**Return:**
- `static

Object with appended $prefix.

`

--------

## prependStringy(\CollectionStringy|static $prefix): static

Returns a new string starting with $prefix.

EXAMPLE:

**Parameters:**
- `CollectionStringy|static ...$prefix

The Stringy objects to append.

`

**Return:**
- `static

Object with appended $prefix.

`

--------

## regexReplace(string $pattern, string $replacement, string $options, string $delimiter): static

Replaces all occurrences of $pattern in $str by $replacement.

EXAMPLE:
s('fòô ')->regexReplace('f[òô]+\s', 'bàř'); // 'bàř'
s('fò')->regexReplace('(ò)', '\\1ô'); // 'fòô'

**Parameters:**
- `string $pattern

The regular expression pattern.

`
- `string $replacement

The string to replace with.

`
- `string $options [optional]

Matching conditions to be used.

`
- `string $delimiter [optional]

Delimiter the the regex. Default: '/'

`

**Return:**
- `static

Object with the result2ing $str after the replacements.

`

--------

## removeHtml(string $allowableTags): static

Remove html via "strip_tags()" from the string.

EXAMPLE:
s('řàb <ô>òf\', ô
foo lall')->removeHtml('

'); // 'řàb òf\', ô
foo lall'

**Parameters:**
- `string $allowableTags [optional]

You can use the optional second parameter to specify tags which should
not be stripped. Default: null

`

**Return:**
- `static`

--------

## removeHtmlBreak(string $replacement): static

Remove all breaks [
| \r\n | \r | \n | ...] from the string.

EXAMPLE:
s('řàb <ô>òf\', ô
foo lall')->removeHtmlBreak(''); // 'řàb <ô>òf\', ô< foo lall'

**Parameters:**
- `string $replacement [optional]

Default is a empty string.

`

**Return:**
- `static`

--------

## removeLeft(string $substring): static

Returns a new string with the prefix $substring removed, if present.

EXAMPLE:
s('fòôbàř')->removeLeft('fòô'); // 'bàř'

**Parameters:**
- `string $substring

The prefix to remove.

`

**Return:**
- `static

Object having a $str without the prefix $substring.

`

--------

## removeRight(string $substring): static

Returns a new string with the suffix $substring removed, if present.

EXAMPLE:
s('fòôbàř')->removeRight('bàř'); // 'fòô'

**Parameters:**
- `string $substring

The suffix to remove.

`

**Return:**
- `static

Object having a $str without the suffix $substring.

`

--------

## removeXss(): static

Try to remove all XSS-attacks from the string.

EXAMPLE:
s('')->removeXss(); // ''

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## repeat(int $multiplier): static

Returns a repeated string given a multiplier.

EXAMPLE:
s('α')->repeat(3); // 'ααα'

**Parameters:**
- `int $multiplier

The number of times to repeat the string.

`

**Return:**
- `static

Object with a repeated str.

`

--------

## replace(string $search, string $replacement, bool $caseSensitive): static

Replaces all occurrences of $search in $str by $replacement.

EXAMPLE:
s('fòô bàř fòô bàř')->replace('fòô ', ''); // 'bàř bàř'

**Parameters:**
- `string $search

The needle to search for.

`
- `string $replacement

The string to replace with.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## replaceAll(string[] $search, string|string[] $replacement, bool $caseSensitive): static

Replaces all occurrences of $search in $str by $replacement.

EXAMPLE:
s('fòô bàř lall bàř')->replaceAll(['fòÔ ', 'lall'], '', false); // 'bàř bàř'

**Parameters:**
- `string[] $search

The elements to search for.

`
- `string|string[] $replacement

The string to replace with.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## replaceBeginning(string $search, string $replacement): static

Replaces all occurrences of $search from the beginning of string with $replacement.

EXAMPLE:
s('fòô bàř fòô bàř')->replaceBeginning('fòô', ''); // ' bàř bàř'

**Parameters:**
- `string $search

The string to search for.

`
- `string $replacement

The replacement.

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## replaceEnding(string $search, string $replacement): static

Replaces all occurrences of $search from the ending of string with $replacement.

EXAMPLE:
s('fòô bàř fòô bàř')->replaceEnding('bàř', ''); // 'fòô bàř fòô '

**Parameters:**
- `string $search

The string to search for.

`
- `string $replacement

The replacement.

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## replaceFirst(string $search, string $replacement): static

Replaces first occurrences of $search from the beginning of string with $replacement.

EXAMPLE:

**Parameters:**
- `string $search

The string to search for.

`
- `string $replacement

The replacement.

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## replaceLast(string $search, string $replacement): static

Replaces last occurrences of $search from the ending of string with $replacement.

EXAMPLE:

**Parameters:**
- `string $search

The string to search for.

`
- `string $replacement

The replacement.

`

**Return:**
- `static

Object with the resulting $str after the replacements.

`

--------

## reverse(): static

Returns a reversed string. A multibyte version of strrev().

EXAMPLE:
s('fòôbàř')->reverse(); // 'řàbôòf'

**Parameters:**
__nothing__

**Return:**
- `static

Object with a reversed $str.

`

--------

## safeTruncate(int $length, string $substring, bool $ignoreDoNotSplitWordsForOneWord): static

Truncates the string to a given length, while ensuring that it does not
split words. If $substring is provided, and truncating occurs, the
string is further truncated so that the substring may be appended without
exceeding the desired length.

EXAMPLE:
s('What are your plans today?')->safeTruncate(22, '...'); // 'What are your plans...'

**Parameters:**
- `int $length

Desired length of the truncated string.

`
- `string $substring [optional]

The substring to append if it can fit. Default: ''

`
- `bool $ignoreDoNotSplitWordsForOneWord`

**Return:**
- `static

Object with the resulting $str after truncating.

`

--------

## setInternalEncoding(string $new_encoding): static

Set the internal character encoding.

EXAMPLE:

**Parameters:**
- `string $new_encoding

The desired character encoding.

`

**Return:**
- `static`

--------

## sha1(): static

Create a sha1 hash from the current string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## sha256(): static

Create a sha256 hash from the current string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## sha512(): static

Create a sha512 hash from the current string.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## shortenAfterWord(int $length, string $strAddOn): static

Shorten the string after $length, but also after the next word.

EXAMPLE:
s('this is a test')->shortenAfterWord(2, '...'); // 'this...'

**Parameters:**
- `int $length

The given length.

`
- `string $strAddOn [optional]

Default: '…'

`

**Return:**
- `static`

--------

## shuffle(): static

A multibyte string shuffle function. It returns a string with its
characters in random order.

EXAMPLE:
s('fòôbàř')->shuffle(); // 'àôřbòf'

**Parameters:**
__nothing__

**Return:**
- `static

Object with a shuffled $str.

`

--------

## similarity(string $str): float

Calculate the similarity between two strings.

EXAMPLE:

**Parameters:**
- `string $str

The delimiting string.

`

**Return:**
- `float`

--------

## slice(int $start, int $end): static

Returns the substring beginning at $start, and up to, but not including
the index specified by $end. If $end is omitted, the function extracts
the remaining string. If $end is negative, it is computed from the end
of the string.

EXAMPLE:
s('fòôbàř')->slice(3, -1); // 'bà'

**Parameters:**
- `int $start

Initial index from which to begin extraction.

`
- `int $end [optional]

Index at which to end extraction. Default: null

`

**Return:**
- `static

Object with its $str being the extracted substring.

`

--------

## slugify(string $separator, string $language, string[] $replacements, bool $replace_extra_symbols, bool $use_str_to_lower, bool $use_transliterate): static

Converts the string into an URL slug. This includes replacing non-ASCII
characters with their closest ASCII equivalents, removing remaining
non-ASCII and non-alphanumeric characters, and replacing whitespace with
$separator. The separator defaults to a single dash, and the string
is also converted to lowercase. The language of the source string can
also be supplied for language-specific transliteration.

EXAMPLE:
s('Using strings like fòô bàř')->slugify(); // 'using-strings-like-foo-bar'

**Parameters:**
- `string $separator [optional]

The string used to replace whitespace.

`
- `ASCII::*_LANGUAGE_CODE $language [optional]

Language of the source string.

`
- `array $replacements [optional]

A map of replaceable strings.

`
- `bool $replace_extra_symbols [optional]

Add some more replacements e.g. "£" with "
pound ".

`
- `bool $use_str_to_lower [optional]

Use "string to lower" for the input.

`
- `bool $use_transliterate [optional]

Use ASCII::to_transliterate() for unknown
chars.

`

**Return:**
- `static

Object whose $str has been converted to an URL slug.

`

--------

## snakeCase(): static

Convert the string to snake_case.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## snakeize(): static

Convert a string to snake_case.

EXAMPLE:
s('foo1 Bar')->snakeize(); // 'foo_1_bar'

**Parameters:**
__nothing__

**Return:**
- `static

Object with $str in snake_case.

`

--------

## softWrap(int $width, string $break): static

Wrap the string after the first whitespace character after a given number
of characters.

EXAMPLE:

**Parameters:**
- `int $width

Number of characters at which to wrap.

`
- `string $break [optional]

Character used to break the string. | Default "\n"

`

**Return:**
- `static`

--------

## split(string $pattern, int $limit): static[]

Splits the string with the provided regular expression, returning an
array of Stringy objects. An optional integer $limit will truncate the
results.

EXAMPLE:
s('foo,bar,baz')->split(',', 2); // ['foo', 'bar']

**Parameters:**
- `string $pattern

The regex with which to split the string.

`
- `int $limit [optional]

Maximum number of results to return. Default: -1 === no
limit

`

**Return:**
- `static[]

An array of Stringy objects.

`

--------

## splitCollection(string $pattern, int $limit): CollectionStringy|static[]

Splits the string with the provided regular expression, returning an
collection of Stringy objects. An optional integer $limit will truncate the
results.

EXAMPLE:

**Parameters:**
- `string $pattern

The regex with which to split the string.

`
- `int $limit [optional]

Maximum number of results to return. Default: -1 === no
limit

`

**Return:**
- `\CollectionStringy|static[]

An collection of Stringy objects.

`

--------

## startsWith(string $substring, bool $caseSensitive): bool

Returns true if the string begins with $substring, false otherwise. By
default, the comparison is case-sensitive, but can be made insensitive
by setting $caseSensitive to false.

EXAMPLE:
s('FÒÔbàřbaz')->startsWith('fòôbàř', false); // true

**Parameters:**
- `string $substring

The substring to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str starts with $substring.

`

--------

## startsWithAny(string[] $substrings, bool $caseSensitive): bool

Returns true if the string begins with any of $substrings, false otherwise.

By default the comparison is case-sensitive, but can be made insensitive by
setting $caseSensitive to false.

EXAMPLE:
s('FÒÔbàřbaz')->startsWithAny(['fòô', 'bàř'], false); // true

**Parameters:**
- `string[] $substrings

Substrings to look for.

`
- `bool $caseSensitive [optional]

Whether or not to enforce case-sensitivity. Default: true

`

**Return:**
- `bool

Whether or not $str starts with $substring.

`

--------

## strip(string|string[] $search): static

Remove one or more strings from the string.

EXAMPLE:

**Parameters:**
- `string|string[] $search One or more strings to be removed`

**Return:**
- `static`

--------

## stripWhitespace(): static

Strip all whitespace characters. This includes tabs and newline characters,
as well as multibyte whitespace such as the thin space and ideographic space.

EXAMPLE:
s(' Ο συγγραφέας ')->stripWhitespace(); // 'Οσυγγραφέας'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## stripeCssMediaQueries(): static

Remove css media-queries.

EXAMPLE:
s('test @media (min-width:660px){ .des-cla #mv-tiles{width:480px} } test ')->stripeCssMediaQueries(); // 'test test '

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## stripeEmptyHtmlTags(): static

Remove empty html-tag.

EXAMPLE:
s('foo

bar')->stripeEmptyHtmlTags(); // 'foobar'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## studlyCase(): static

Convert the string to StudlyCase.

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## substr(int $start, int $length): static

Returns the substring beginning at $start with the specified $length.

It differs from the $this->utf8::substr() function in that providing a $length of
null will return the rest of the string, rather than an empty string.

EXAMPLE:

**Parameters:**
- `int $start

Position of the first character to use.

`
- `int $length [optional]

Maximum number of characters used. Default: null

`

**Return:**
- `static

Object with its $str being the substring.

`

--------

## substring(int $start, int $length): static

Return part of the string.

Alias for substr()

EXAMPLE:
s('fòôbàř')->substring(2, 3); // 'ôbà'

**Parameters:**
- `int $start

Starting position of the substring.

`
- `int $length [optional]

Length of substring.

`

**Return:**
- `static`

--------

## substringOf(string $needle, bool $beforeNeedle): static

Gets the substring after (or before via "$beforeNeedle") the first occurrence of the "$needle".

If no match is found returns new empty Stringy object.

EXAMPLE:

**Parameters:**
- `string $needle

The string to look for.

`
- `bool $beforeNeedle [optional]

Default: false

`

**Return:**
- `static`

--------

## substringOfIgnoreCase(string $needle, bool $beforeNeedle): static

Gets the substring after (or before via "$beforeNeedle") the first occurrence of the "$needle".

If no match is found returns new empty Stringy object.

EXAMPLE:

**Parameters:**
- `string $needle

The string to look for.

`
- `bool $beforeNeedle [optional]

Default: false

`

**Return:**
- `static`

--------

## surround(string $substring): static

Surrounds $str with the given substring.

EXAMPLE:
s(' ͜ ')->surround('ʘ'); // 'ʘ ͜ ʘ'

**Parameters:**
- `string $substring

The substring to add to both sides.

`

**Return:**
- `static

Object whose $str had the substring both prepended and appended.

`

--------

## swapCase(): static

Returns a case swapped version of the string.

EXAMPLE:
s('Ντανιλ')->swapCase(); // 'νΤΑΝΙΛ'

**Parameters:**
__nothing__

**Return:**
- `static

Object whose $str has each character's case swapped.

`

--------

## tidy(): static

Returns a string with smart quotes, ellipsis characters, and dashes from
Windows-1252 (commonly used in Word documents) replaced by their ASCII
equivalents.

EXAMPLE:
s('“I see…”')->tidy(); // '"I see..."'

**Parameters:**
__nothing__

**Return:**
- `static

Object whose $str has those characters removed.

`

--------

## titleize(string[]|null $ignore, string|null $word_define_chars, string|null $language): static

Returns a trimmed string with the first letter of each word capitalized.

Also accepts an array, $ignore, allowing you to list words not to be
capitalized.

EXAMPLE:
$ignore = ['at', 'by', 'for', 'in', 'of', 'on', 'out', 'to', 'the'];
s('i like to watch television')->titleize($ignore); // 'I Like to Watch Television'

**Parameters:**
- `string[]|null $ignore [optional]

An array of words not to capitalize or null.
Default: null

`
- `string|null $word_define_chars [optional]

An string of chars that will be used as whitespace
separator === words.

`
- `string|null $language [optional]

Language of the source string.

`

**Return:**
- `static

Object with a titleized $str.

`

--------

## titleizeForHumans(string[] $ignore): static

Returns a trimmed string in proper title case: Also accepts an array, $ignore, allowing you to list words not to
be capitalized.

EXAMPLE:

Adapted from John Gruber's script.

**Parameters:**
- `string[] $ignore

An array of words not to capitalize.

`

**Return:**
- `static

Object with a titleized $str

`

--------

## toAscii(string $language, bool $removeUnsupported): static

Returns an ASCII version of the string. A set of non-ASCII characters are
replaced with their closest ASCII counterparts, and the rest are removed
by default. The language or locale of the source string can be supplied
for language-specific transliteration in any of the following formats:
en, en_GB, or en-GB. For example, passing "de" results in "äöü" mapping
to "aeoeue" rather than "aou" as in other languages.

EXAMPLE:
s('fòôbàř')->toAscii(); // 'foobar'

**Parameters:**
- `ASCII::*_LANGUAGE_CODE $language [optional]

Language of the source string.

`
- `bool $removeUnsupported [optional]

Whether or not to remove the
unsupported characters.

`

**Return:**
- `static

Object whose $str contains only ASCII characters.

`

--------

## toBoolean(): bool

Returns a boolean representation of the given logical string value.

For example, 'true', '1', 'on' and 'yes' will return true. 'false', '0',
'off', and 'no'
will return false. In all instances, case is ignored.
For other numeric strings, their sign will determine the return value.
In addition, blank strings consisting of only whitespace will return
false. For all other strings, the return value is a result of a
boolean cast.

EXAMPLE:
s('OFF')->toBoolean(); // false

**Parameters:**
__nothing__

**Return:**
- `bool

A boolean value for the string.

`

--------

## toLowerCase(bool $tryToKeepStringLength, string|null $lang): static

Converts all characters in the string to lowercase.

EXAMPLE:
s('FÒÔBÀŘ')->toLowerCase(); // 'fòôbàř'

**Parameters:**
- `bool $tryToKeepStringLength [optional]

true === try to keep the string length: e.g. ẞ -> ß

`
- `string|null $lang [optional]

Set the language for special cases: az, el, lt, tr

`

**Return:**
- `static

Object with all characters of $str being lowercase.

`

--------

## toSpaces(int $tabLength): static

Converts each tab in the string to some number of spaces, as defined by
$tabLength. By default, each tab is converted to 4 consecutive spaces.

EXAMPLE:
s(' String speech = "Hi"')->toSpaces(); // ' String speech = "Hi"'

**Parameters:**
- `int $tabLength [optional]

Number of spaces to replace each tab with. Default: 4

`

**Return:**
- `static

Object whose $str has had tabs switched to spaces.

`

--------

## toString(): string

Return Stringy object as string, but you can also use (string) for automatically casting the object into a
string.

EXAMPLE:
s('fòôbàř')->toString(); // 'fòôbàř'

**Parameters:**
__nothing__

**Return:**
- `string`

--------

## toTabs(int $tabLength): static

Converts each occurrence of some consecutive number of spaces, as
defined by $tabLength, to a tab. By default, each 4 consecutive spaces
are converted to a tab.

EXAMPLE:
s(' fòô bàř')->toTabs(); // ' fòô bàř'

**Parameters:**
- `int $tabLength [optional]

Number of spaces to replace with a tab. Default: 4

`

**Return:**
- `static

Object whose $str has had spaces switched to tabs.

`

--------

## toTitleCase(): static

Converts the first character of each word in the string to uppercase
and all other chars to lowercase.

EXAMPLE:
s('fòô bàř')->toTitleCase(); // 'Fòô Bàř'

**Parameters:**
__nothing__

**Return:**
- `static

Object with all characters of $str being title-cased.

`

--------

## toTransliterate(bool $strict, string $unknown): static

Returns an ASCII version of the string. A set of non-ASCII characters are
replaced with their closest ASCII counterparts, and the rest are removed
unless instructed otherwise.

EXAMPLE:

**Parameters:**
- `bool $strict [optional]

Use "transliterator_transliterate()" from PHP-Intl | WARNING: bad
performance | Default: false

`
- `string $unknown [optional]

Character use if character unknown. (default is ?)

`

**Return:**
- `static

Object whose $str contains only ASCII characters.

`

--------

## toUpperCase(bool $tryToKeepStringLength, string|null $lang): static

Converts all characters in the string to uppercase.

EXAMPLE:
s('fòôbàř')->toUpperCase(); // 'FÒÔBÀŘ'

**Parameters:**
- `bool $tryToKeepStringLength [optional]

true === try to keep the string length: e.g. ẞ -> ß

`
- `string|null $lang [optional]

Set the language for special cases: az, el, lt, tr

`

**Return:**
- `static

Object with all characters of $str being uppercase.

`

--------

## trim(string $chars): static

Returns a string with whitespace removed from the start and end of the
string. Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.

EXAMPLE:
s(' fòôbàř ')->trim(); // 'fòôbàř'

**Parameters:**
- `string $chars [optional]

String of characters to strip. Default: null

`

**Return:**
- `static

Object with a trimmed $str.

`

--------

## trimLeft(string $chars): static

Returns a string with whitespace removed from the start of the string.

Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.

EXAMPLE:
s(' fòôbàř ')->trimLeft(); // 'fòôbàř '

**Parameters:**
- `string $chars [optional]

Optional string of characters to strip. Default: null

`

**Return:**
- `static

Object with a trimmed $str.

`

--------

## trimRight(string $chars): static

Returns a string with whitespace removed from the end of the string.

Supports the removal of unicode whitespace. Accepts an optional
string of characters to strip instead of the defaults.

EXAMPLE:
s(' fòôbàř ')->trimRight(); // ' fòôbàř'

**Parameters:**
- `string $chars [optional]

Optional string of characters to strip. Default: null

`

**Return:**
- `static

Object with a trimmed $str.

`

--------

## truncate(int $length, string $substring): static

Truncates the string to a given length. If $substring is provided, and
truncating occurs, the string is further truncated so that the substring
may be appended without exceeding the desired length.

EXAMPLE:
s('What are your plans today?')->truncate(19, '...'); // 'What are your pl...'

**Parameters:**
- `int $length

Desired length of the truncated string.

`
- `string $substring [optional]

The substring to append if it can fit. Default: ''

`

**Return:**
- `static

Object with the resulting $str after truncating.

`

--------

## underscored(): static

Returns a lowercase and trimmed string separated by underscores.

Underscores are inserted before uppercase characters (with the exception
of the first character of the string), and in place of spaces as well as
dashes.

EXAMPLE:
s('TestUCase')->underscored(); // 'test_u_case'

**Parameters:**
__nothing__

**Return:**
- `static

Object with an underscored $str.

`

--------

## upperCamelize(): static

Returns an UpperCamelCase version of the supplied string. It trims
surrounding spaces, capitalizes letters following digits, spaces, dashes
and underscores, and removes spaces, dashes, underscores.

EXAMPLE:
s('Upper Camel-Case')->upperCamelize(); // 'UpperCamelCase'

**Parameters:**
__nothing__

**Return:**
- `static

Object with $str in UpperCamelCase.

`

--------

## upperCaseFirst(): static

Converts the first character of the supplied string to upper case.

EXAMPLE:
s('σ foo')->upperCaseFirst(); // 'Σ foo'

**Parameters:**
__nothing__

**Return:**
- `static

Object with the first character of $str being upper case.

`

--------

## urlDecode(): static

Simple url-decoding.

e.g:
'test+test' => 'test test'

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlDecodeMulti(): static

Multi url-decoding + decode HTML entity + fix urlencoded-win1252-chars.

e.g:
'test+test' => 'test test'
'Düsseldorf' => 'Düsseldorf'
'D%FCsseldorf' => 'Düsseldorf'
'Düsseldorf' => 'Düsseldorf'
'D%26%23xFC%3Bsseldorf' => 'Düsseldorf'
'Düsseldorf' => 'Düsseldorf'
'D%C3%BCsseldorf' => 'Düsseldorf'
'D%C3%83%C2%BCsseldorf' => 'Düsseldorf'
'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlDecodeRaw(): static

Simple url-decoding.

e.g:
'test+test' => 'test+test

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlDecodeRawMulti(): static

Multi url-decoding + decode HTML entity + fix urlencoded-win1252-chars.

e.g:
'test+test' => 'test+test'
'Düsseldorf' => 'Düsseldorf'
'D%FCsseldorf' => 'Düsseldorf'
'Düsseldorf' => 'Düsseldorf'
'D%26%23xFC%3Bsseldorf' => 'Düsseldorf'
'Düsseldorf' => 'Düsseldorf'
'D%C3%BCsseldorf' => 'Düsseldorf'
'D%C3%83%C2%BCsseldorf' => 'Düsseldorf'
'D%25C3%2583%25C2%25BCsseldorf' => 'Düsseldorf'

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlEncode(): static

Simple url-encoding.

e.g:
'test test' => 'test+test'

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlEncodeRaw(): static

Simple url-encoding.

e.g:
'test test' => 'test%20test'

EXAMPLE:

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## urlify(string $separator, string $language, string[] $replacements, bool $strToLower): static

Converts the string into an URL slug. This includes replacing non-ASCII
characters with their closest ASCII equivalents, removing remaining
non-ASCII and non-alphanumeric characters, and replacing whitespace with
$separator. The separator defaults to a single dash, and the string
is also converted to lowercase.

EXAMPLE:
s('Using strings like fòô bàř - 1$')->urlify(); // 'using-strings-like-foo-bar-1-dollar'

**Parameters:**
- `string $separator [optional]

The string used to replace whitespace. Default: '-'

`
- `string $language [optional]

The language for the url. Default: 'en'

`
- `array $replacements [optional]

A map of replaceable strings.

`
- `bool $strToLower [optional]

string to lower. Default: true

`

**Return:**
- `static

Object whose $str has been converted to an URL slug.

`

--------

## utf8ify(): static

Converts the string into an valid UTF-8 string.

EXAMPLE:
s('Düsseldorf')->utf8ify(); // 'Düsseldorf'

**Parameters:**
__nothing__

**Return:**
- `static`

--------

## words(string $char_list, bool $remove_empty_values, int|null $remove_short_values): static[]

Convert a string into an array of words.

EXAMPLE:

**Parameters:**
- `string $char_list [optional]

Additional chars for the definition of "words".

`
- `bool $remove_empty_values [optional]

Remove empty values.

`
- `int|null $remove_short_values [optional]

The min. string length or null to disable

`

**Return:**
- `static[]`

--------

## wordsCollection(string $char_list, bool $remove_empty_values, int|null $remove_short_values): CollectionStringy|static[]

Convert a string into an collection of words.

EXAMPLE:
S::create('中文空白 oöäü#s')->wordsCollection('#', true)->toStrings(); // ['中文空白', 'oöäü#s']

**Parameters:**
- `string $char_list [optional]

Additional chars for the definition of "words".

`
- `bool $remove_empty_values [optional]

Remove empty values.

`
- `int|null $remove_short_values [optional]

The min. string length or null to disable

`

**Return:**
- `\CollectionStringy|static[]

An collection of Stringy objects.

`

--------

## wrap(string $substring): static

Surrounds $str with the given substring.

EXAMPLE:

**Parameters:**
- `string $substring

The substring to add to both sides.

`

**Return:**
- `static

Object whose $str had the substring both prepended and appended.

`

--------

## Tests

From the project directory, tests can be ran using `phpunit`

## Support

For support and donations please visit [Github](https://github.com/voku/Stringy/) | [Issues](https://github.com/voku/Stringy/issues) | [PayPal](https://paypal.me/moelleken) | [Patreon](https://www.patreon.com/voku).

For status updates and release announcements please visit [Releases](https://github.com/voku/Stringy/releases) | [Twitter](https://twitter.com/suckup_de) | [Patreon](https://www.patreon.com/voku/posts).

For professional support please contact [me](https://about.me/voku).

## Thanks

- Thanks to [GitHub](https://github.com) (Microsoft) for hosting the code and a good infrastructure including Issues-Managment, etc.
- Thanks to [IntelliJ](https://www.jetbrains.com) as they make the best IDEs for PHP and they gave me an open source license for PhpStorm!
- Thanks to [Travis CI](https://travis-ci.com/) for being the most awesome, easiest continous integration tool out there!
- Thanks to [StyleCI](https://styleci.io/) for the simple but powerfull code style check.
- Thanks to [PHPStan](https://github.com/phpstan/phpstan) && [Psalm](https://github.com/vimeo/psalm) for relly great Static analysis tools and for discover bugs in the code!

## License

Released under the MIT License - see `LICENSE.txt` for details.