我正在开发一个函数,它会将所有字符串重写为友好的URL。我在这个主题上看到的100%答案都只使用英文字母。
这是我到目前为止所做的:
<?php
function CleanURL($string, $delimiter = '-') {
// Remove special characters
$string = preg_replace("/[~`{}.'\"\!\@\#\$\%\^\&\*\(\)\_\=\+\/\?\>\<\,\[\]\:\;\|\\\]/", "", $string);
// Replace blank space with delimeter
$string = preg_replace("/[\/_|+ -]+/", $delimiter, $string);
return $string;
}
echo CleanURL('Testing special characters: !@#$%^&*()_+[];\'\,./{}:"|<>?'); // Returns Testing-special-characters-
echo '<br />';
echo CleanURL('Bulgarian: текстово съобщение'); // Bulgarian-текстово-съобщение
echo '<br />';
echo CleanURL('Chinese: 短信'); // Chinese-短信
echo '<br />';
?>
有人可以帮我解决以下问题:
-
(如果有的话); strtolower()
,如果可能的话; preg_replace
; 答案 0 :(得分:1)
1。
您可以尝试trim($string,"-")
。它删除了两端的所有破折号。
2。
使用多字节字符时,应使用mb_函数。使用它,您可以使用mb_strtolower($string);
3。
如果您只想删除非单词字符,也许这对您有用:preg_replace("/[^\p{L}]/ui","","Bulgarian: текстово съобщение");
这变为
function CleanURL($string, $delimiter = '-') {
// Remove special characters
$string = preg_replace("/[^\p{L}\/_|+ -]/ui","",$string);
// Replace blank space with delimeter
$string = preg_replace("/[\/_|+ -]+/", $delimiter, $string);
// Trim delimiter
$string = trim($string,$delimiter);
return mb_strtolower($string);
}
<强>更新强>
以下是我所做的preg内容的文档,以防您想要调整它: http://php.net/manual/en/regexp.reference.unicode.php
并将您定义的字符添加为合法字符,否则无法用分隔符替换,呃。
答案 1 :(得分:0)
我们在生产中如何做到这一点。效果很好,试一试!
编辑如果需要,只需添加更多$str=str_replace('','',$str);
编辑2 扩展此类,或使用以下链接中的此库来支持大多数字符。我认为这是你最好的选择,而不是先将所有内容转换为ascii。
http://iamseanmurphy.com/creating-seo-friendly-urls-in-php-with-url-slug/
致电Text_Slug::slugify($str_to_be_slugified);
调用Text_Slug::isSlugified($string);
以快速检查字符串是否已经过度化
class Text_Slug
{
public static function slugify($str)
{
$str=str_replace("é",'e',$str); //Special chars
$str=str_replace("É",'E',$str); //Special chars
$str=str_replace(' ','-',$str);
$str=preg_replace("/[^a-zA-Z0-9_\-]/i","",$str);
return strtolower($str);
}
//Check if its slugified.
public static function isSlugified($string)
{
if(preg_match("/[^a-zA-Z0-9_\-]/i", $string) > 0)
return false;
else
return true;
}
}
答案 2 :(得分:0)
if (substr($string, -1) === '-') {
$string = substr($string, 0, -1); // Remove last char
}
return mb_strtolower($string);
(也许我稍后会更新)
现在,我们把它放在一起:
function CleanURL($string, $delimiter = '-') {
// Remove special characters
$string = preg_replace("/[~`{}.'\"\!\@\#\$\%\^\&\*\(\)\_\=\+\/\?\>\<\,\[\]\:\;\|\\\]/", "", $string);
// Replace blank space with delimeter
$string = preg_replace("/[\/_|+ -]+/", $delimiter, $string);
// Remove the last -, if there is one
if (substr($string, -1) === '-') {
$string = substr($string, 0, -1); // Remove last char
}
return mb_strtolower($string);
}