使用PHP转换特殊字符

时间:2012-07-10 17:04:07

标签: php string special-characters

我正在尝试将标准的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”

5 个答案:

答案 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

Example@viper7

答案 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"');
?>

Live Example

当然,如果你想在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));
}