1
0
mirror of https://github.com/danielstjules/Stringy.git synced 2025-08-13 00:34:11 +02:00

Add slugify

This commit is contained in:
Daniel St. Jules
2013-07-21 23:07:31 -04:00
parent 031e9e68b2
commit feb4c5a36d
3 changed files with 52 additions and 6 deletions

View File

@@ -275,7 +275,7 @@ Converts each tab in a string to some number of spaces, as defined by
$tabLength. By default, each tab is converted to 4 consecutive spaces.
```php
S:::toSpaces(' String speech = "Hi"') \\ ' String speech = "Hi"'
S::toSpaces(' String speech = "Hi"') \\ ' String speech = "Hi"'
```
##### toTabs
@@ -287,15 +287,24 @@ by $tabLength, to a tab. By default, each 4 consecutive spaces are
converted to a tab.
```php
S:::toTabs(" fòô bàř") \\ " fòô bàř"
S::toTabs(" fòô bàř") \\ " fòô bàř"
```
##### slugify
S::slugify(string $str)
Converts the supplied text into an URL slug. This includes replacing
non-ASCII characters with their closest ASCII equivalents, removing
non-alphanumeric and non-ASCII characters, and replacing whitespace with
dashes. The string is also converted to lowercase.
```php
S::slugify('Using strings like fòô bàř') // 'using-strings-like-foo-bar'
```
## TODO
**toAnchor**
**slugify**
**contains**
**between**

View File

@@ -450,6 +450,22 @@ class Stringy {
return str_replace($spaces, "\t", $str);
}
/**
* Converts the supplied text into an URL slug. This includes replacing
* non-ASCII characters with their closest ASCII equivalents, removing
* non-alphanumeric and non-ASCII characters, and replacing whitespace with
* dashes. The string is also converted to lowercase.
*
* @param string $str Text to transform into an URL slug
* @return string The corresponding URL slug
*/
public static function slugify($str) {
$str = preg_replace('/[^a-zA-Z\d -]/u', '', self::standardize($str));
$str = self::clean($str);
return self::dasherize(strtolower($str));
}
}
?>

View File

@@ -485,6 +485,27 @@ class StringyTestCase extends PHPUnit_Framework_TestCase {
return $testData;
}
/**
* @dataProvider stringsForSlugify
*/
public function testSlugify($expected, $string) {
$result = S::slugify($string);
$this->assertEquals($expected, $result);
}
public function stringsForSlugify() {
$testData = array(
array('foo-bar', ' foo bar '),
array('foo-dbar', " Foo d'Bar "),
array('a-string-with-dashes', 'A string-with-dashes'),
array('using-strings-like-foo-bar', 'Using strings like fòô bàř'),
array('unrecognized-chars-like', 'unrecognized chars like συγγρ'),
array('numbers-1234', 'numbers 1234')
);
return $testData;
}
}
?>