在 Laravel/Algolia 中处理令人困惑的 URL
Handling a confusingly slug'd URL in Laravel/Algolia
我正在使用 laravel 5.2 的优秀 algolia/algoliasearch-laravel 软件包。
我上传到 Algolia 的 "products" 产品名称中有一个正斜杠:
Teal Stag Cashmere Scarf/Stole by Johnstons of Elgin
使用 cviebrock/eloquent-sluggable 包将其更改为以下 url:
/products/women/Cashmere%20Patterned%20Scarves/teal-stag-cashmere-scarf++stole-by-johnstons-of-elgin
注意围巾和披肩之间的 ++。
上传到 Algolia 后,我得到了这个:
objectID: 8122
name: "Teal Stag Cashmere Scarf/Stole by Johnstons of Elgin"
imgsrc: "Stag Teal Cashmere Stole (Small)_small.jpg"
rank: 0
url: "https://mywebsite.com/products/women/Cashmere Patterned Scarves/teal-stag-cashmere-scarfstole-by-johnstons-of-elgin"
看看 algolia 中的 url 怎么不对?我已经尝试在 ++ 中撬入 url 但我现在有点迷失了如何继续。
完成此操作后,答案很简单,即我的原始 URL 格式不正确。我重新编写了使用 Laravel 5.2 中的 str_slug 函数生成 url 的方式,一切都很好:
/**
* Generate a URL friendly "slug" from a given string.
*
* @param string $title
* @param string $separator
* @return string
*/
public static function slug($title, $separator = '-')
{
$title = static::ascii($title);
// Convert all dashes/underscores into separator
$flip = $separator == '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));
// Replace all separator characters and whitespace by a single separator
$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
return trim($title, $separator);
}
我正在使用 laravel 5.2 的优秀 algolia/algoliasearch-laravel 软件包。
我上传到 Algolia 的 "products" 产品名称中有一个正斜杠:
Teal Stag Cashmere Scarf/Stole by Johnstons of Elgin
使用 cviebrock/eloquent-sluggable 包将其更改为以下 url:
/products/women/Cashmere%20Patterned%20Scarves/teal-stag-cashmere-scarf++stole-by-johnstons-of-elgin
注意围巾和披肩之间的 ++。
上传到 Algolia 后,我得到了这个:
objectID: 8122
name: "Teal Stag Cashmere Scarf/Stole by Johnstons of Elgin"
imgsrc: "Stag Teal Cashmere Stole (Small)_small.jpg"
rank: 0
url: "https://mywebsite.com/products/women/Cashmere Patterned Scarves/teal-stag-cashmere-scarfstole-by-johnstons-of-elgin"
看看 algolia 中的 url 怎么不对?我已经尝试在 ++ 中撬入 url 但我现在有点迷失了如何继续。
完成此操作后,答案很简单,即我的原始 URL 格式不正确。我重新编写了使用 Laravel 5.2 中的 str_slug 函数生成 url 的方式,一切都很好:
/**
* Generate a URL friendly "slug" from a given string.
*
* @param string $title
* @param string $separator
* @return string
*/
public static function slug($title, $separator = '-')
{
$title = static::ascii($title);
// Convert all dashes/underscores into separator
$flip = $separator == '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', mb_strtolower($title));
// Replace all separator characters and whitespace by a single separator
$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
return trim($title, $separator);
}