【问题标题】:Convert special characters like ' \t ' to " \t " (a real tab)将' \t '等特殊字符转换为“ \t ”(真正的制表符)
【发布时间】:2011-05-13 19:21:23
【问题描述】:

我想在我的网站上制作一个 CSV 文件导入器。我希望用户选择分隔符。

问题是当表单提交时,分隔符字段存储为'\t',例如,当我解析文件时,我搜索字符串'\t'而不是真正的TAB。它对每个特殊字符(如 \r、\n 等)做同样的事情......

我想知道在不使用如下数组的情况下将这些字符转换为真实表示的方式或函数:

  • 't' => "\t"
  • 'r' => "\r"
  • ...

【问题讨论】:

    标签: php csv special-characters


    【解决方案1】:

    您可能应该决定允许使用哪些特殊字符并创建一个类似这样的函数:

    function translate_quoted($string) {
      $search  = array("\\t", "\\n", "\\r");
      $replace = array( "\t",  "\n",  "\r");
      return str_replace($search, $replace, $string);
    }
    

    【讨论】:

      【解决方案2】:
      echo str_replace("\\t", "\t", $string);
      

      在此处查看示例:http://ideone.com/IVFZk

      【讨论】:

        【解决方案3】:

        PHP 解释器自动转义 PHP 源文件中的双引号字符串,因此 echo "\t" 实际上表示一个 TAB 字符。

        相反,当您从任何外部来源读取字符串时,反斜杠采用其文字值:反斜杠和“t”。您可以在 PHP 源代码中将其表示为 "\\t"(双引号)或 '\t'(单引号),这不是您想要的。

        Sebastián's solution 有效,但 PHP 提供了一个本机函数。

        stripcslashes() 识别类 C 序列(\a、\b、\f、\n、\r、\t 和 \v),以及八进制和十六进制表示,并将它们转换为它们的实际含义。

        // C-like escape sequence
        stripcslashes('\t') === "\t"; // true;
        
        // Hexadecimal escape sequence
        stripcslashes('\x09') === "\t"; // true;
        
        // Octal escape sequence
        stripcslashes('\011') === "\t"; // true;
        

        【讨论】:

          【解决方案4】:

          看起来 SO 将选项卡留在引号中,但在任何垫子上按一次制表符然后复制到引号中应该可以工作。

          $data = str_replace("\t", " ", $data);
          

          【讨论】:

          • HTML 实体非常适合 HTML,但如果您将其复制粘贴到纯文本文件中,这不会导致问题吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-11
          • 1970-01-01
          • 2011-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多