php - 比较 PHP 中的 Unicode 字符

标签 php wordpress unicode utf-8

我无法比较两个在我看来应该完全相同的 unicode 字符。我怀疑它们的编码方式不同,但不知道如何将它们更改为相同的编码。

我想要比较的字符来自缅甸 Unicode block 。我正在 php 5 上运行 wordpress,并尝试制作一个自定义插件来处理缅甸 Unicode。我所有的文件都是用 UTF-8 编码的,但我不知道 wordpress 是做什么的。

这就是我正在做的事情:

function myFunction( $inputText ) {
    $outputText = '';
    $inputTextArray = str_split($inputText);
    foreach($inputTextArray as $char) {
        if ($char == "က") // U+1000, a character from the Myanmar Unicode block 
            $outputText .= $char;
    }
    return $outputText;
}
add_filter( 'the_content', 'myFunction');

在解决问题的这个阶段,该函数应该只返回内容中出现的 က。然而,它只返回空字符串,即使 က 明确存在于帖子内容中也是如此。如果我将字符更改为任何拉丁字符,该函数将按预期工作。

所以,我的问题是,如何对这些字符($char"က")进行编码,以便当 $char包含这个字符,它们比较相等。

最佳答案

str_split 不支持 unicode。对于多字节字符,它会将它们拆分为单个字符。尝试使用 multi-byte string functionspreg_split使用 /u 开关

$inputTextArray = preg_split("//u", $inputText, -1, PREG_SPLIT_NO_EMPTY);

http://codepad.viper-7.com/ErFwcy

使用多字节函数mb_substr_count你也可以减少你的代码。像这样,

function myFunction( $inputText ) {
    return str_repeat("က", mb_substr_count($inputText, "က"));
}

或者使用正则表达式,

preg_match_all("/က/u", $text, $match);
$output = implode("", $match[0]);

关于php - 比较 PHP 中的 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392904/

相关文章:

Java:Runtime.getRuntime().exec() 在不应以 unicode 格式传递参数时

php - sql查询显示每个结果3次而不是只一次

php - 如何根据当前登录用户显示所有数据

php - 带有 DOMDocument 的网页抓取工具

javascript - 多个复选框过滤器返回服务器错误 500

php - Woocommerce 订阅自定义费用添加到经常性总额

php - Laravel 说 "Route not defined"

wordpress - 如何将简码插入wordpress菜单

regex - 这些 Unicode 字符(代码点)在这个正则表达式中是什么意思?

c++ - 使用 C++ 的 Unicode 文件函数