Unicode Str::用于印地语和阿拉伯语字符串的slug替代品?
我使用Unicode Str::用于印地语和阿拉伯语字符串的slug替代品?,unicode,laravel,laravel-4,multilingual,Unicode,Laravel,Laravel 4,Multilingual,我使用Str::slug生成友好的URL,但是Str::slug()方法在阿拉伯语和印地语字符串上返回null。可能是中国人、日本人、韩国人和那些角色 例如: return Str::slug('मनोरंजन'); //null 如何有效地解决此问题?尝试以下方法: 保存: Str::slug(Input::get('title'))==""?strtolower(urlencode(Input::get('title'))):Str::slug(Input::get('title'));
Str::slug
生成友好的URL,但是Str::slug()
方法在阿拉伯语和印地语字符串上返回null
。可能是中国人、日本人、韩国人和那些角色
例如:
return Str::slug('मनोरंजन'); //null
如何有效地解决此问题?尝试以下方法:
保存:
Str::slug(Input::get('title'))==""?strtolower(urlencode(Input::get('title'))):Str::slug(Input::get('title'));
获取:
$slug = strtolower(urlencode($slug));
我在使用阿拉伯语时遇到过这个问题,所以我制作了以下函数,为我解决了这个问题
function make_slug($string = null, $separator = "-") {
if (is_null($string)) {
return "";
}
// Remove spaces from the beginning and from the end of the string
$string = trim($string);
// Lower case everything
// using mb_strtolower() function is important for non-Latin UTF-8 string | more info: http://goo.gl/QL2tzK
$string = mb_strtolower($string, "UTF-8");;
// Make alphanumeric (removes all other characters)
// this makes the string safe especially when used as a part of a URL
// this keeps latin characters and arabic charactrs as well
$string = preg_replace("/[^a-z0-9_\s-ءاأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى]/u", "", $string);
// Remove multiple dashes or whitespaces
$string = preg_replace("/[\s-]+/", " ", $string);
// Convert whitespaces and underscore to the given separator
$string = preg_replace("/[\s_]/", $separator, $string);
return $string;
}
请注意,此函数仅解决阿拉伯语的问题,如果要解决印地语或任何其他语言的问题,则需要添加印地语字符(或其他语言的字符)除了或代替这些字符之外,请尝试使用其他现有的阿拉伯语字符。示例工作完美!另外,请确保通过PHP使用utf-8:
header('Content-Type:text/html;charset=utf-8')代码>或HTML元标记。它工作得很好,但别忘了添加数字