我正在尝试将标准的wordpress标题转换为slug,使所有字符都为小写,用短划线替换空格,并删除所有“&”标题中的符号。
因此,我们以此标题为例:“身份和寻路”
这是我的PHP:
<?php
$title = get_the_title();
$lower = strtolower($title);
$noDash = str_replace(' ', '-', $lower);
$noAnd = str_replace('&', '', $noDash);
echo $noAnd;
?>
这会将我的标题变成“身份 - #038; -wayfinding ”
小写转换有效,但更换了“&amp;”什么都没有用。正在转换“&amp;”成为HTML特殊字符。知道我怎么可以简单地取代“&amp;”有空白,但也删除了破折号,所以最后的标题是:“identity-wayfinding”?
答案 0 :(得分:3)
如果你想要一个slug,有很多实用程序会为你做,但是htmlentities或urlencode都没有。 Doctrine 1.2包含一个urlizer
类,其中包含一组静态函数,包括urilize
,它将以更强大的方式完成您想要的行为(处理UTF-8和正确无关等等)。
可以找到here
如果你想要一些不那么健壮但更简单的东西:
function slugify($sluggable)
{
$sluggable = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $sluggable);
$sluggable = trim($sluggable, '-');
if( function_exists('mb_strtolower') ) {
$sluggable = mb_strtolower( $sluggable );
} else {
$sluggable = strtolower( $sluggable );
}
$sluggable = preg_replace("/[\/_|+ -]+/", '-', $sluggable);
return $sluggable;
}
这将删除非字母数字字符(但也包括重音字符)并将空格,+符号和连字符设为连字符。
答案 1 :(得分:0)
首先删除“”(空格),然后“ - ”然后替换“&”;使用str_replace。用短划线。
$title = "Identity & Wayfinding";
$title = strtolower(str_replace(array(" ","-","&"),array("","","-"),$title));
echo $title; // returns: identity-wayfinding
答案 2 :(得分:0)
你可能正在谈论slu ,,请看这些:
答案 3 :(得分:0)
使用此代码:
<?php
function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
$slug=ltrim($slug, "-");
$slug=rtrim($slug, "-");
return strtolower($slug);
}
echo create_slug('does this thing work or not');
//returns 'does-this-thing-work-or-not'
echo "<br />";
echo create_slug('"Identity & Wayfinding"');
?>
当然,如果你想在Wordpress中使用这个功能,你只需要使用它:
<?php sanitize_title( $title, $fallback_title ) ?>
其中,$title
是输入字符串&amp; $fallback_title
是默认值,如果$title
为空。在此处阅读更多内容:Wordpress Function Reference/Sanitize Title
答案 4 :(得分:0)
这是我使用的功能。
function text_as_url($str='', $separator = 'dash', $lowercase = false){
if ($separator == 'dash'){
$search = '_';
$replace = '-';
} else {
$search = '-';
$replace = '_';
}
$trans = array(
'\/' => '-',
'&\#\d+?;' => '-',
'&\S+?;' => '-',
'\s+' => $replace,
'[^a-z0-9\-\._]' => '', // accents
$replace.'+' => $replace,
$replace.'$' => $replace,
'^'.$replace => $replace,
'\.+$' => '-'
);
$str = strip_tags($str);
foreach ($trans as $key => $val){
$str = preg_replace("#".$key."#i", $val, $str);
}
if($lowercase === true){
$str = strtolower($str);
}
return trim(stripslashes($str));
}