Обработка сбивающего с толку URL в Laravel/Algolia

Я использую превосходный пакет algolia/algoliasearch-laravel с laravel 5.2.

У одного из моих "продуктов", которые я загружаю в Algolia, есть косая черта в названии продукта:

Кашемировый шарф из оленьего оленя / украден Джонстонсом из Элгина

Это преобразуется в следующий URL-адрес с помощью пакета cviebrock/eloquent-sluggable следующим образом:

/ продукция / женщины /Cashmere%20Patterned%20Scarves/ чирок-мальчишник-кашемир-шарф ++ украл-на-Johnstons-оф-Elgin

Обратите внимание на ++ между шарфом и украл.

Когда это загружено в Алголию, я получаю это:

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"

Видите, как этот URL в Алголии не так? Я пробовал толковать в URL ++ в URL, но теперь я немного растерялся, как поступить.

1 ответ

Решение

После проработки этого ответа был просто, что мои оригинальные URL плохо сформированы. Я переписал способ генерирования URL-адресов с помощью функции str_slug из Laravel 5.2, и все снова хорошо:

 /**
 * 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);
}
Другие вопросы по тегам