-2

この質問は以前に尋ねられ、何の答えもなく閉じられました

2回目の幸運なことに、私の前の質問は閉じられました:https ://stackoverflow.com/questions/14903375/php-clean-up-path-with-duplicate-slashesは、私の質問が何であるかを明確にするために疑問符が欠落しているようですだった。

質問:

  1. 文字列から重複するスラッシュを削除するにはどうすればよいですか?以下のコードと例を参照してください。
  2. windows(wamp)はスラッシュを使用したファイルパスをどの程度サポートしていますか?c:/ wampを書くのは間違っているように感じますが、私が確信が持てない理由としてはうまく機能しているようです。

コード:

<?php
function clean($full_path){
    return str_replace(array("\\", "//", "\/", "/\"), DIRECTORY_SEPARATOR, $full_path);
}

$paths = array(
 'var/www/tpl//main.tpl',
 'C:\wamp\www\/tpl\\main.tpl',
 'C:\wamp\www/\tpl\main.tpl');

 foreach($paths as $path){
     echo "Before: $url\nAfter:  ".clean($path)."\n---------------------\n";
 }
 ?>
4

3 に答える 3

2

バックスラッシュをエスケープする必要があると思います。これを試して:

<?php

function clean($full_path){
    return str_replace(array(
        "\\\\",
        "\\/", 
        "//", 
        "\\/", 
        "/\\"), DIRECTORY_SEPARATOR, $full_path);
}

$paths = array(
 'var/www/tpl//main.tpl',
 'C:\wamp\www\/tpl\\main.tpl',
 'C:\wamp\www/\tpl\main.tpl');

 foreach($paths as $path){
     echo "Before: $path <br/> After:  ".clean($path)."<br/>---------------------<br/>";
 }

?>
于 2013-02-16T09:05:37.240 に答える
1

windows(wamp)はスラッシュを使用したファイルパスをどの程度サポートしていますか?c:/ wampを書くのは間違っているように感じますが、私が確信が持てない理由としてはうまく機能しているようです。

PHPはこれを非常によくサポートしています。実際には何年も前から、DIRECTORY_SEPARATORクロスプラットフォームのコードを簡単に作成するのに役立つので、代わりにそれを使用することができます。

ただし、これがWAMPのネットワーク共有であることに注意してください。

\\host\share\path\to\file.ext

したがって、二重スラッシュを「単に」削除することは、実際には悪い考えです。あなたが望むかもしれないものはと呼ばれrealpathます。

于 2013-02-16T09:16:23.877 に答える
1

preg_match();またはを使用できますstr_replace();

于 2013-02-16T09:19:31.617 に答える