使用shell命令执行字符操作

时间:2011-09-19 15:40:31

标签: php csv character-encoding

我需要将从Mac Excel 2011导出的CSV文件转换为CMS识别的可导入格式(解决方案不应该相关,但导入格式适用于Drupal Feeds模块,尽管是目标)。

为了做到这一点,我需要在Vim中执行以下操作:

:%s/\r/\r/g
:w ++enc=utf8

这基本上意味着:

  1. 将回车转换为某种通用格式
    • 最初,当Excel导出它们时,回车符由^M
    • 表示
    • Vim命令:%s/\r/\r/g将它们全部转换为CMS识别为回车的格式
  2. 将字符编码转换为UTF8。
    • 最初导出时,字符集为ASCII Extended或类似名称。
  3. 理想情况下,在将文件作为导入的一部分上传时,需要触发此过程,这意味着PHP将触发该过程,无论该过程是否与过程有关。但是我觉得在这个时候处理解决方案作为shell脚本或类似的东西感觉更舒服,但当然如果我能弄清楚如何将它挂钩到Drupal 7 Feeds中,欢迎使用PHP解决方案。

1 个答案:

答案 0 :(得分:0)

一些未经测试的代码:

#!/bin/php
<?php

$replacements = array(
    // Adjust destination char to your liking
    "\r\n" => "\n",
    "\r" => "\n",
    "\n" => "\n",
);

// No risk to split chars: input is single byte
while( $line = fread(STDIN, 10240) ){
    // Normalize line feeds
    $line = strtr($line, $replacements);

    // Convert to UTF-8 (adjust source encoding to your needs)
    $line = iconv('CP1252', 'UTF-8', $line);

    fwrite(STDOUT, $line);
}

用法:

./fix-csv < input.csv > output.csv