【发布时间】: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()的第二个参数是要删除的字符列表,而不是要删除的字符串,因此只需添加一次任何字符就足够了。这意味着' ---'将与' -'具有相同的效果。它将删除所有空格和破折号,无论它们有多少或按什么顺序。