かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP 文字列末にある特定の文字を除去したい。

例えば WordPressを使ったサイトで home_url('/') でサイトのURLを取得してそこからURLを組み立てたい時とか。
home_url('/') は行末に / が出力されるので、/ 始まりの変数と結合するとイケてないURLに…

<?php
define('IMG_DIR', '/assets/images');
$dir = home_url('/') . IMG_DIR;
echo $dir;
// => http://example.wordpress.com//assets/images

str_replace() を使って削除できるけど正規表現が必要なので、そこまでカロリーを使いたくない…

trim系の関数で除去できた!

trim系の関数は第二引数に除去する文字列を指定することができるようです。
これを利用して、行末の/を除去したい場合は rtrim(str, '/') とすればOK。

rtrim
string rtrim ( string $str [, string $character_mask ] )
パラメータ
character_mask 削除する文字を指定することも可能です。 削除したい全ての文字をリストにしてください。.. を文字の範囲を指定する際に使用可能です。
出典: PHP: rtrim - Manual

<?php
rtrim( home_url('/'), '/' ); // => http://example.wordpress.com

echo rtrim( home_url('/'), '/' ) . IMG_DIR;
// => http://example.wordpress.com/assets/images

簡単にできた(۶•̀ᴗ•́)۶

trim() って空文字除去ってイメージしかなかったので、第二引数で除去する文字列を自由に指定できることは知りませんでした… (そういえば行末の改行削除とかでも使ってた気がしてきた…
確かにtrimって刈り込むとか切り落とすとかって意味ですから、空文字に限らなくても不思議ではないですね!


[参考]