PHP - 単一のスラッシュに複数のスラッシュを減らします
-
18-09-2019 - |
質問
私は、単一のスラッシュに複数のスラッシュを軽減するために使用する正規表現を持っています。目的は、以前のApacheのmod_rewriteでを使用して人間が読めるリンクに変換されたURLを読み取ることで、このようなます:
http://www.website.com/about/me
この作品ます:
$uri = 'about//me';
$uri = preg_replace('#//+#', '/', $uri);
echo $uri; // echoes 'about/me'
これは動作しません。
$uri = '/about//me';
$uri = preg_replace('#//+#', '/', $uri);
echo $uri; // echoes '/about/me'
私は一人で、各URLパラメータで動作できるようにする必要がありますが、私はtraillingスラッシュを爆発場合は、2番目の例では、それは私に3つのセグメントの代わりに、2つのセグメントを返します。いずれかの場合にはパラメータが空の場合、私はPHPで確認することができますが、私は正規表現を使用していて、私はセグメントを心配する必要がないように、正規表現はすでに、私のためにそれの世話をする場合、それはいいだろう検証ます。
任意の考え?
解決
str_replaceが速く、この場合であってもよい。
$uri = str_replace("//","/",$uri)
第二に:使用トリム: http://hu.php.net/manual /en/function.trim.phpする
$uri = trim($uri,"/");
他のヒント
どのように2番目の$ URIに置き換える実行について?
$uri = preg_replace('#^/#', '', $uri);
末尾のスラッシュが除去される方法。 1にpreg_replaceでそれをすべて行うことは、私を打つ:) LTRIMを使用すると、(おそらくより速く)移動するための方法可能性があります。
私は、それぞれで動作できるようにする必要があります URLだけでは、パラメータが、2番目で たとえば、私はtraillingを爆発場合 スラッシュ、それは私に3つのセグメントを返します 代わりに、2つのセグメントの
は、このための一つの修正はPREG_SPLIT_NO_EMPTY
に設定された第3引数でpreg_splitを使用することです。
$uri = '/about//me';
$uri_segments = preg_split('#/#', $uri, PREG_SPLIT_NO_EMPTY);
// $uri_segments[0] == 'about';
// $uri_segments[1] == 'me';
これは、単一のスラッシュの文字列内の二重スラッシュに変換し、このコードの利点は、文字列(http://
)のプロトコル部のスラッシュが維持されることである。
preg_replace("#(^|[^:])//+#", "\\1/", $str);
あなたは1つの正規表現の中に、すべての3つの選択肢を組み合わせることができます。
$urls = array(
'about/me',
'/about//me',
'/about///me/',
'////about///me//'
);
print_r(
preg_replace('~^/+|/+$|/(?=/)~', '', $urls)
);
あなたは完全に消毒をスキップし、代わりにpreg_split
経由で文字列を分割することができます。あなたはまだかかわらず、空のチャンクに対処する必要があります。
後期しかし、これらすべてのメソッドが削除されますhttp://
もスラッシュが、これます。
function to_single_slashes($input) {
return preg_replace('~(^|[^:])//+~', '\\1/', $input);
}
# out: http://localhost/lorem-ipsum/123/456/
print to_single_slashes('http:///////localhost////lorem-ipsum/123/////456/');