使用explode从文件路径中提取字符串。数组不打印字母“n”

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (15)

我正在使用从特定目录中的字体文件名中explode()提取字符串($style),然后根据生成的数组打印一些样式。如果字符串包含字母n,则结果将被截断。

服务器是Ubuntu Bionic运行PHP7.3。后if (in_array())声明未能赶上字符串我添加了一个print_r()调试语句。就在那时,我看到这封信n充当了边界并截断了输出。

字体名称都采用格式$family- $style-webfont.woff(或.woff2),例如merriweather-bold-webfont.woff

示例代码:

function my_fontload() {
    // Locate font files
    $font_path = get_stylesheet_directory_uri() . "/path/to/fonts/";
    $files = glob(get_stylesheet_directory( __FILE__ ) . '/path/to/fonts/*.woff', GLOB_BRACE);

    $suffix = '-webfont';
      foreach($files as &$file) {

        $font = basename($file, ".woff");
        $font = chop($font,$suffix);

        $family = explode("-", $font);
        $family = $family[0];

        $style = explode("-", $font);


        echo '@font-face{font-family:\''.$family.'\';src:url('. esc_url(( $font_path).basename($file)).'2)format(\'woff2\'),url('.esc_url(( $font_path).basename($file)).')format(\'woff\');';
        if (in_array('thin', $style) || in_array( 'hairline', $style)) {
            // Do stuff
        } elseif (in_array('regular', $style) || in_array( 'normal', $style)) {
           // Do other stuff
        } else {
            // Do default stuff
        }
        // Other logic here

        // debugging
        print_r($style);
    }

    unset ($file);
}

预期结果:


(
    [0] => merriweather
    [1] => regular
)

(
    [0] => merriweather
    [1] => thin
)

(
    [0] => merriweather
    [1] => hairline
)

实际结果:


(
    [0] => merriweather
    [1] => regular
)

(
    [0] => merriweather
    [1] => thi
)

(
    [0] => merriweather
    [1] => hairli
)

这就好像n被视为一些文字,如换行符或其他东西。这是怎么回事?

提问于
用户回答回答于

首先,我建议将语法更改为:

list($family, $style) = explode('-', $font, 2);

因为它似乎只想比较风格。然后你不需要,in_array但你可以只使用if声明。

对你的修剪问题:正如你在剁文档中看到的那样,第二个参数说明要从字符串的右侧删除哪些字母 - 你具体说明了这些字母:-,w,e,b,f,o,n,t所以从最开始的字母开始 - 如果它是其中一个字母 -遇到第一封信时谁也不停 - >

因此,你得到的thi不是thin删除n而是没有i。而hairli不是hairline两者ne在字母-,w,e,b,f,o,n,t,但没有i

实例:3v4l

如果你想要的(我想这就是你想要的)是删除后缀使用:

substr($fonf, 0, - strlen('-webfont'));

编辑:

这是代码的示例:

$files = ['merriweather-regular-webfont.woff','merriweather-thin-webfont.woff','merriweather-hairline-webfont.woff'];
foreach($files as $file) {
    $font = basename($file, ".woff"); // remove the file type
    $font = str_replace('-webfont', '', $font); // remove the suffix
    list($family, $style) = explode('-', $font, 2); // explode for 2 parts: family and style
    echo "Family: $family and style: $style" . PHP_EOL; 
    if (in_array($style, ['thin', 'hairline'])) {
        echo esc_html('font-weight:100;font-style:normal;'); 
    } elseif (in_array($style, ['regular', 'normal'])) {
       echo esc_html('font-weight:400;font-style:normal;');
    } else {
        echo esc_html('font-weight:400;font-style:normal;'); // Fallback 
    }
}

热门问答

如何设置物联网通信的规则引擎转发到微信小程序?

DylanRichard

腾讯 · 产品经理 (已认证)

万物互联的时代,欢迎来到IoT的世界
推荐

正如参考文章所述,通过规则引擎述是将设备上行数据转发到服务端而不是直接到小程序,需要开发者基于API SDK用于服务端开发,并于小程序进行上下行通信。

在房间内切出app/闪退后还继续收费吗?

腾讯音视频小蔡

深圳市腾讯科技 · 软件开发工程师 (已认证)

QQ:471381568
推荐
1、切出app调用pause的时候是在房间的话,会一直收费。 2、比如A在程序闪退后,如果没有重连,90秒后A会自动退出房间。 3、扣费有疑问可以先看下运营指引:https://cloud.tencent.com/document/product/607/17448 如果对扣费还...... 展开详请

腾讯IM web端sdk 1.7版本,更新到当前最新,在哪里可以查看有什么改动呢?

使用微信小程序也可以做腾讯云的标准视频直播吗?使用微信小程序做腾讯云的视频直播和im即时通讯可行吗?

美女视频一起走向共同富裕
推荐
支持的 IM部分,集成云通信 https://cloud.tencent.com/document/product/269/36838 标准直播部分,使用live-pusher和live-player标签,然后用云直播即可 https://cloud.tencent.com/do...... 展开详请

为什么我通过控制台vnc看到的界面和用vnc viewer看的的界面不一样???

HappyLau谈云计算专注于公有云,私有云解决方案,在kubernetes,openstack,kvm,ceph,linux,shell有丰富的实战经验。
推荐

控制台页面使用的是novnc,novnc是一种基于web页面使用的vnc客户端,详情可参考https://github.com/novnc/noVNC介绍,常规的vnc viewer是图形的客户端,所使用的依赖库有所不同,因此显示也不一样。

iOS在release下不走sendProcessBlock进度回调?

karis

腾讯 · 客户端开发工程师 (已认证)

Karis
推荐

请问是哪个版本的sdk呢,调用代码方便贴一下吗,最好能提供一个能复现的demo哈

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励