【问题标题】:How to replace backslashes with forward slashes without changing the content of the link如何在不更改链接内容的情况下用正斜杠替换反斜杠
【发布时间】:2026-01-23 04:50:01
【问题描述】:

有一个 2011 年的老问题,但答案有误。

也许现在有人可以给出更好的答案。问题是:我们如何用这个变量链接中的正斜杠替换反斜杠:

$str = "http://www.domain.com/data/images\flags/en.gif";

错误的答案是:

echo $str = str_replace('\\', '/', $str);

这是错误的,因为该代码的结果改变了链接的内容。 (http://www.domain.com/data/imageslags/en.gif) 它不仅找到了反斜杠,还找到了后面的字母 f 并将它们删除,因为\f 的意思是“formfeed (hex 0C)”。那么我们如何才能避免这种错误的替换呢?

The Code is here

【问题讨论】:

  • 首先,谁在 url 中有表单提要?
  • $str 可以用单引号吗?我认为这应该工作
  • 我觉得没关系
  • 嗨,@stribizhev 您的代码也将 \flags 更改为 /lags。 :(
  • 如果我不知道反斜杠的下一个字符是什么,我该怎么办?也许其他地方是 \e 或 \n。我应该为所有人做同样的事情吗?

标签: php regex escaping


【解决方案1】:

您可以使用addcslashes,但您必须指定每个可能出现在$str 中的转义字符

$str = "http://www.domain.com/data/images\flags/en.gif";
$escaped = str_replace("\\","/",addcslashes($str,"\f\r\n\t"));
echo $escaped; // result is 'http://www.domain.com/data/images/flags/en.gif'

【讨论】:

    【解决方案2】:

    希望对你有帮助

    $str = "http://www.domain.com/data/images\flags/en.gif";
    echo $str = str_replace('lags', "/flags", $str);
    

    【讨论】:

      最近更新 更多