【问题标题】:Backslash Disappears from Filename反斜杠从文件名中消失
【发布时间】:2011-12-31 10:40:16
【问题描述】:

这是我的代码:

<script>
document.getElementById(div').innerHTML = '<a href="javascript:void(0);" onclick="openPhpFile (\'asdasD\\Asdeqw.txt\');">efff</a>';
</script>

openPhpFile 函数运行时,我提醒文件名,并且\ 字符消失了,即使它们是双倍的。 addslashes() 没有帮助;会是什么?

【问题讨论】:

  • 我们需要查看函数 openPhpFile 和 .php 文件来解决您的问题

标签: php javascript backslash slash


【解决方案1】:

你应该这样做:

<script type='text/javascript'>
  (function () { // Closures are your friend
    // Declare variables
    var theDiv, theLink;
    // Create the link and assign attributes
    theLink = document.createElement('a');
    theLink.innerHTML = 'efff';
    theLink.href = '#';
    theLink.onclick = function () {
      openPhpFile('asdasD\\Asdeqw.txt');
    };
    // Get a reference to the container, empty the container and add the link
    theDiv = document.getElementById('div');
    theDiv.innerHTML = '';
    theDiv.appendChild(theLink);
  })();
</script>

请记住,如果您在双引号内使用echofrom PHP,您实际上需要4 个反斜杠。这是因为 PHP 也会使用双反斜杠序列,并且只会输出一个。所以如果你想让 PHP 回显 2 个反斜杠,你需要把 4 放进去。

【讨论】:

  • “href”应该只是“#”之类的;没有理由让它成为“javascript:”虚假网址。
  • @DaveRandom 不正确的做法是使用addEventListenerattachEvent,因为onClick 不是跨浏览器兼容的。见quirksmode.org/js/events_advanced.html
  • @AmirRaminfar 虽然我真的无法反驳这一点,但我不知道有哪个(现代)浏览器无法正常工作——尽管我很高兴得到纠正。
  • 除此之外,在 jQuery 中这将是一行。 :)
  • @AmirRaminfar 在常规 js 中并没有那么糟糕,这是以最复杂的方式来做的
【解决方案2】:

尝试:

var div = document.getElementById("div");

div.innerHTML = '<a>efff</a>';

div.firstChild.onclick = function () {
  openPhpFile('asdasD\\\\Asdeqw.txt');
};

【讨论】:

  • 嗯没关系,如果文件名在 var 中,我应该使用 addlashes(addslashes()),所以两次?
  • +1,我喜欢这个。没有hrefa 不会导致页面重新加载吗?
  • @DaveRandom 我没有测试过,至少在 google chrome 中没有 JohnSmith,你需要添加 php 代码以便我们知道需要做什么..
【解决方案3】:

如果你打开 js 控制台你会看到它变成了asdasD\Asdeqw.txt

所以尝试添加另一个斜线。

'<a href="javascript:void(0);" onclick="openPhpFile (\'asdasD\\\Asdeqw.txt\');">efff</a>'

【讨论】:

    【解决方案4】:

    您是否尝试过为每个反斜杠放置 4 个而不是 2 或 3 个?

    【讨论】:

      【解决方案5】:

      只是想知道为什么这里需要反斜杠?不是所有操作系统都支持(甚至更喜欢)正斜杠吗?也许我在 Linux 世界里待得太久了。

      我只会使用正斜杠,至少对于您的双反斜杠(显然不是引号)。我很想知道你在做什么,这意味着正斜杠不起作用。

      【讨论】:

      • 你是完全正确的,但遗憾的是 FILE 使用了反斜杠 :)
      • 典型的 JS 丑陋。 ...这就是我要说的。
      • @JohnSmith ...那么只需str_replace('\\','/',__FILE__) - 它仍然适用于Win。
      猜你喜欢
      • 2011-06-05
      • 2014-09-20
      • 1970-01-01
      • 2023-04-08
      • 2012-04-25
      • 2013-07-23
      • 1970-01-01
      • 2013-08-06
      相关资源
      最近更新 更多