我的问题与这个帖子有关:How to use a text file as database in Yii2

我已经设法从 struct 化的ANSI编码文本文件(没有CSV,但指定了列的位置和长度)中读取数据,并在网格视图中显示它们.我已经将列pos和len定义保存到MySQL表中,这样我就可以访问该表.现在,我正在读取这些列定义,并且可以成功地正确读取每一列:

foreach ($lines as $line) {
    if (substr($line, 0, 1) === $type) {
        $model = new DynamicModel($dynamicAttributes);
        foreach ($fielddefs as $fielddef) {
            $attributeName = $fielddef->attributes['variable'];
            $value = substr($line, $fielddef->pos, $fielddef->len);
            $model->$attributeName = $value;
        }
        $models[] = $model;
    }
}
return $models;

例如,在某一列中出现诸如ü、ö等的特殊字符之前,在这种情况下,下一列中的值被移位,因此这似乎改变了读取下一列的方式,位置或长度不再被正确定义.我试图将整个文件转换为带有mb_convert_encoding()的UTF8,但不幸的是没有帮助.一旦我删除任何像这样的特殊字符,整个记录,所有的列都会被完美地读取.你以前有过这样的经历吗?我怎么才能解决这个问题呢?谢谢.

文本文件如下所示:

enter image description here

结果在网格视图中如下所示:

enter image description here

推荐答案

对于涉及多字节字符的情况,需要使用mb_substr

mb_substr(
    string $string,
    int $start,
    ?int $length = null,
    ?string $encoding = null
): string

仅供参考,mb_substr根据字符数执行多字节安全substr()操作.位置从字符串的开头开始计算.第一个角色的位置为0.第二个字符位置为1,依此类推.

你可以在这sandbox中看到这个功能的效果

Php相关问答推荐

CodeIgniter AJAX表格提交中的CSRF token 再生问题

允许Laravel路由指定`withTrashed`,尽管有显式的模型绑定

根据特定运输类别增加WooCommerce购物车总重量

WooCommerce基于元数据的自定义范围目录排序

仅在WooCommerce管理订单视图上显示订单项自定义元数据

Laravel;Composer安装突然返回选项快捷方式不能为空.

Laravel POST方法返回状态:POST方法上不允许使用405方法

为什么只有最后一次点击的点赞/心形会按预期改变 colored颜色 ,而其他的保持正常 colored颜色 ?

如何使用索引加速和优化MySQL搜索

PHP-准备用于TCP套接字的数据包

将WooCommerce WC_Order对象与wp_Schedule_Event一起使用

如何用Ubuntu 22.04在VSCode中启用XDebug

无法允许元素(img:'src')与symfony html-sanitizer(symfony6.3 php 8.2)

在 DateTime 或 DateTimeImmutable 对象上调用modify() 时是否必须使用空格?

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

如何为自定义帖子类型的自定义角色提供功能

在 vue 自定义渲染器中访问变量

在 WooCommerce wc_get_products 函数中处理自定义分类法

Woocommerce API 的 PHP Curl 附加参数

Laravel 查询关系是否为 bool