【问题标题】:Can't explode string after file upload文件上传后无法爆炸字符串
【发布时间】:2014-04-18 15:49:57
【问题描述】:

我的网站上有一个上传系统,您可以在其中上传电子名片。我还写了一个 vcard 解析器,它将正确的字段放入数据库中。

唯一的问题是,当我上传我的 vcard(使用 laravel)时,我无法分解文件内容。

    foreach (Input::file('vcards', array()) as $vcard)
    {
        if ($vcard->guessExtension() !== 'vcf')
        {
            continue;
        }

        $filename = uniqid() . '.vcf';

        $vcard->move(storage_path('vcards'), $filename);

        $contacts = array_filter(explode('BEGIN:VCARD', file_get_contents(storage_path("vcards/$filename"))));
    }

$contacts 是一个计数数组,它是文件字符串。经过一些测试,我发现,如果我只是做 explode('B', $fileContents);该字符串中的任何其他字母。它将爆炸给定的字符串。

我也在我的服务器上试过这个,看看它是否可能与我的电脑有关,但出现了同样的问题。

我也试过把绳子剪断(可能太大了),也没有用。

后来我注意到另一个 vcard 正在工作,但另一个没有,在解析它之前我应该​​尝试某种字符串编码吗?

【问题讨论】:

  • if (!$vcard->guessExtension() === 'vcf') 好像很奇怪,不应该是if ($vcard->guessExtension() !== 'vcf')吗?
  • 是的,我知道,这很棘手,但它确实有效。也用你的语法
  • 它是假的,所以它会在此之后继续,更正它:),但它对这个问题没有帮助

标签: php file laravel laravel-4 vcf-vcard


【解决方案1】:

“explode()”区分大小写吗? vCard 标准规定“BEGIN”可以是任何大小写(尽管在实践中,它几乎总是大写)。我会检查“BEGIN”属性中字符的大小写,以确保它们对于每个 vCard 都是大写的。另外,检查冒号周围的空格。

【讨论】:

  • 也尝试了空格,但唯一触发的是单个字符,例如 B 或 E 或冒号。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2020-12-10
  • 1970-01-01
相关资源
最近更新 更多