2016-06-30 38 views
0

Ich verwende das hervorragende Algolia/Algolesearch-Laravel-Paket mit Laravel 5.2.Verwende eine verwirrende Slug-URL in Laravel/Algolia

Einer meiner "Produkte" Ich bin Hochladen auf Algolia einen Schrägstrich im Produktnamen hat:

Teal Hirsch Kaschmir-Schal/Stola von Johnstons of Elgin

Dieser geändert wird in die folgende uRL der cviebrock/eloquent-Sluggable Paket mit wie so:

/products/Frauen/Cashmere% 20Patterned% 20Scarves/teal-Hirsch-Kaschmir-Schal ++ Stola-by-johnstons-of-elgin

Beachten Sie die ++ zwischen Schal und Stola.

Wenn dies Algolia hochgeladen ich dieses:

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" 

Sehen Sie, wie die URL in algolia nicht richtig ist? Ich habe versucht, in einem ++ in die URL krähen, aber ich bin jetzt irgendwie verloren, wie Sie vorgehen.

+0

Versuchen Sie, ein '% 2F' statt'/'Ihre URL könnte URL Encoding – Farkie

+0

ja müssen - dies Ergebnisse in diesem am Algolia Ende (ich benutze preg_replace) '/ teal-stag-cashmere-scarf2fstole-by-johnstons-of-elgin' Ich werde sehen, ob ich codieren kann, bevor Sie es in schlüsseln übergeben –

+0

@Farkie - urlencoding machte die Dinge schlimmer lol '/ tealstagcashmerescarf2fstolebyjohnstonsofelgin' –

Antwort

1

Nach der Arbeit war die Antwort einfach, dass meine ursprünglichen URLs schlecht gebildet sind. Ich neu geschrieben, wie die Urls der str_slug Funktion von Laravel erzeugt werden unter Verwendung von 5.2 und alles ist gut wieder:

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