【问题标题】:Access specific characters in UTF-8 string访问 UTF-8 字符串中的特定字符
【发布时间】:2014-08-11 11:52:57
【问题描述】:

questions answer here 将我引向了以下“问题”或挑战:

如果字符串是 UTF-8 编码并包含特殊字符,是否有可能从特定位置获取字符。

因此,对于包含字符串的非特殊字符,这是可行的:

$str = 'abcd';
echo $str{1}; // will print "b"

但是对于这样的字符串:

$str = 'abc★';
echo $str{1}; // will return "b"
echo $str{3}; // leads to a question mark

当然,PHP 文件是用 UTF-8 编码的,<meta charset="utf-8"> 在 HTML 的头部。

那么有什么解决方案可以让这种在字符串中捕获字符的方法起作用吗?

【问题讨论】:

    标签: php string encoding utf-8


    【解决方案1】:

    一种可能的方法

    $str = 'abc★';
    
    preg_match_all('/./su', $str, $m);
    $chars = $m[0];
    
    echo $chars[1]; // b
    echo $chars[3]; // ★
    

    /./su 表示“任何字符,包括换行符 ("s"),在 utf8 模式下 ("u")”。

    或者像这样

    echo mb_substr($str, 3, 1, 'utf8'); // ★
    

    【讨论】:

    • 所以没有可能让它与花括号一起工作?
    • @TiMESPLiNTER:嗯,我有一个库可以让你做echo str('abc★')[3] 之类的事情,它正确地呼应了星星。但是香草php没有办法。
    • 好的,但是为什么这不起作用?我的意思是它总是被告知一个字符串是一个字符数组。所以应该可以在不破坏字符的情况下访问其中一个......
    • @TiMESPLiNTER:不,php 字符串不是 字符 的数组。它是一个 bytes 数组,在 unicode 世界中,char != byte。
    猜你喜欢
    • 1970-01-01
    • 2015-03-12
    • 2023-03-27
    • 1970-01-01
    • 2017-03-04
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多