用PHP转换特殊字符


Converting Special Characters with PHP

我正试图将一个标准的wordpress标题变成一个slug,使所有字符小写,用破折号替换空格,并删除标题中的所有"&"符号。

因此,让我们以这个标题为例:"身份和寻路"

这是我的PHP:

<?php 
$title = get_the_title(); 
$lower = strtolower($title);
$noDash = str_replace(' ', '-', $lower);
$noAnd = str_replace('&', '', $noDash);
echo $noAnd;
?>

这将我的标题变成"身份-#038;-寻路"

小写字母的转换起了作用,但将"&"替换为nothing不起作用。它将"&"转换为HTML特殊字符。你知道我如何简单地用空白替换"&",同时删除后面的破折号,这样最终的标题就会是:"身份查找"吗?

如果你想要一个slug,有很多实用程序可以为你做这件事,但htmlentities或urlencode都不正确。条令1.2包括一个urlizer类,该类具有一组静态函数,其中包括urilize,它将以更健壮的方式(正确处理UTF-8和非重音等)实现您想要的行为

可以在这里找到

如果你想要不那么健壮但简单得多的东西:

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;
}

这将去掉非字母数字字符(也包括重音字符),并将空格、+符号和连字符变成连字符。

您可能在谈论蛞蝓,请参阅以下内容:

  • Slug URL生成函数覆盖Ç
  • 逃离并创建slug(以及其中链接的文章)的最佳方式
  • 或任何以前链接的答案SEO友好链接,js和/或php剥离这里

使用str_replace,首先删除"(空格),然后删除"-",然后替换&带破折号。

$title = "Identity & Wayfinding";
$title = strtolower(str_replace(array(" ","-","&"),array("","","-"),$title));
echo $title; // returns: identity-wayfinding

Example@viper7.

这是我使用的函数。

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

使用此代码:

 <?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是输入字符串&如果$title为空,则$fallback_title为默认值。点击此处阅读更多:Wordpress函数参考/Sanitize标题