【问题标题】:Converting Special Characters with PHP用 PHP 转换特殊字符
【发布时间】:2012-07-10 05:23:24
【问题描述】:

我正在尝试将标准 wordpress 标题转换为 slug,使所有字符小写,用破折号替换空格,并删除标题中的所有“&”符号。

让我们以这个标题为例:“Identity & Wayfinding

这是我的 PHP:

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

这会将我的标题变成“identity-#038;-wayfinding

小写转换有效,但将“&”替换为空无效。它将“&”转换为 HTML 特殊字符。知道如何简单地将“&”替换为空白,还可以删除之后的破折号,因此最终标题将是:“identity-wayfinding”

【问题讨论】:

标签: php string special-characters


【解决方案1】:

使用str_replace,首先删除“”(空格),然后删除“-”,然后将 & 替换为破折号。

$title = "Identity & Wayfinding";
$title = strtolower(str_replace(array(" ","-","&"),array("","","-"),$title));

echo $title; // returns: identity-wayfinding

Example@viper7.

【讨论】:

  • 他不想要这些功能中的任何一个……他想要一个蛞蝓。
  • 确实如此。他不想要#038;,他想要那个角色被剥夺。
  • htmlentitie 不删除特殊字符
  • #Omeid - 这并没有摆脱“#038;”
  • 您的代码仍然存在同样的问题,但上面的答案效果很好!
【解决方案2】:

如果您想要一个 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;
}

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

【讨论】:

  • 我不想使用 urilize,因为它需要使用这个 php 文件,对于这个简单的更改似乎没有必要
  • 我得到:致命错误:调用未定义函数 mb_strtolower()
  • 你没有 php_mbstring。使用 strtolower 代替 mb_strtolower 或使用我帖子中的更新代码
  • 这给我留下了“interpretive-038-donor”我想要 038- 消失!
  • 在这种情况下,您在输出之前在标题上运行 htmlentities!在运行我给你的功能之前,你需要调用$blah = html_entity_decode($title);
【解决方案3】:

你可能在谈论蛞蝓,看看这些:

【讨论】:

    【解决方案4】:

    使用此代码:

     <?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 是输入字符串,$fallback_title 是默认值,如果 $title 为空。在这里阅读更多:Wordpress Function Reference/Sanitize Title

    【讨论】:

      【解决方案5】:

      这是我使用的函数。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-02
        • 2011-11-17
        • 2012-09-02
        • 1970-01-01
        • 2013-11-29
        • 2017-05-30
        • 1970-01-01
        • 2013-10-03
        相关资源
        最近更新 更多