2016-06-30 5 views
0

Я использую превосходный пакет algolia/algoliasearch-laravel с laravel 5.2.Обращение с путаным URL-адресом slug'd в Laravel/Algolia

Один из моих «продуктов» Я загрузки на Algolia имеет косую черту в названии продукта:

Teal Олень кашемира шарф/Украл по Johnstons из Elgin

Это изменяется в следующий адрес, используя cviebrock/красноречивым-Sluggable пакет как так:

/продукция/женщины/Cashmere% 20Patterned% 20Scarves/чирок-мальчишник-кашемир-шарф ++ украл-на-Johnstons-оф-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-адресе, но теперь я немного потерял информацию о том, как действовать.

+0

Попробуйте '% 2F' вместо'/'Ваш URL, возможно, потребуется URL Encoding – Farkie

+0

да - это приводит к этому на конце Algolia (я использую preg_replace) '/ teal-stag-cashmere-scarf2fstole-by-johnstons-of-elgin' Я посмотрю, могу ли я кодировать url, прежде чем передавать его, чтобы быть пробитым –

+0

@Farkie - urlencoding сделал вещи хуже lol '/ tealstagcashmerescarf2fstolebyjohnstonsofelgin' –

ответ

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); 
}