【问题标题】:Replacing characters at start/end of string with PHP's ltrim/rtrim用 PHP 的 ltrim/rtrim 替换字符串开头/结尾的字符
【发布时间】:2021-09-20 21:45:27
【问题描述】:

我希望从字符串的开头/结尾清除空格和连字符。

我有以下测试代码:

  $sample_titles = array(
    '— — -Daisy Chain –',
    'Ocarina for a Mermaid –',
    ' –—Another for a Sailor - '
  );

  foreach ( $sample_titles as $title ) {

    $updated_title = ltrim( $title, ' -–—' );
    $updated_title = rtrim( $updated_title, ' -–—' );

    echo $updated_title . '<br/>';

  }

这正确输出:

Daisy Chain
Ocarina for a Mermaid
Another for a Sailor

但是,当我在 foreach 循环中应用相同的 ltrim/rtrim 逻辑时(在帖子标题上,我正在“清理”导入的数据,其余代码无关紧要),如下所示:

  foreach ( $product_ids as $key => $product_id ) {

    $title = get_the_title( $product_id );

    $updated_title = ltrim( $title, ' -–—' );
    $updated_title = rtrim( $updated_title, ' -–—' );

    echo $updated_title . '<br/>';

  };

我仍然以这样的连字符/破折号/空格结尾:

Orb 3 –
Ocarina for a Mermaid –
Mini Marina –

任何想法为什么这在一种情况下有效但在另一种情况下无效?

【问题讨论】:

  • 如果要从头到尾修剪相同的字符,只需使用trim() 而不是rtrim()ltrim()
  • 至于为什么不起作用,当您调用get_the_title()时,空格和连字符后面肯定还有其他内容。也许是不间断的空格或换行符。
  • 试试echo ord($title[strlen($title)-1]);
  • 或更好:echo mb_ord(mb_substr($title, mb_strlen($title)-1, 1));
  • 旁注: trim() 的第二个参数是要删除的字符列表,而不是要删除的字符串,因此只需添加一次任何字符就足够了。这意味着' ---' 将与' -' 具有相同的效果。它将删除所有空格和破折号,无论它们有多少或按什么顺序。

标签: php trim


【解决方案1】:

只需将标题抓取功能包装在 html_entity_decode() 中即可解决我遇到的问题:

$product_title = html_entity_decode( get_the_title( $product_id ) );

【讨论】:

    最近更新 更多