【问题标题】:How to compare Unicode fullwidth characters with normal characters?如何比较 Unicode 全角字符和普通字符?
【发布时间】:2015-01-19 10:12:30
【问题描述】:

我的代码如下所示:

<?php
$str1 = 'xxxxxID';
$str2 = 'xxxxxID';

$bool = ($str1 == $str2);
var_dump( $bool);//==> need return true.
?>

请告诉我,如何比较这些字符串?

【问题讨论】:

  • 无论“更新”部分是什么意思,如果您有不同的问题,请将其删除并发布一个新问题(并且您确实需要制定问题的公式)。
  • 我有零钱。对此感到抱歉。

标签: php unicode compare multibyte


【解决方案1】:

您正在寻找音译。你可以使用iconv:

<?php
$str1 = 'xxxxxID';
$str2 = 'xxxxxID';

$str1Translit = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $str1);
$str2Translit = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $str2);

$bool = ($str1Translit == $str2Translit);
var_dump( $bool);//==> need return true.

但您应该知道,这并不适用于每个 unicode 字符,并且可能会显示一些奇怪的结果。

【讨论】:

    【解决方案2】:

    strlen(); 将返回字符串中的字节数。但是,您的问题有些不清楚。

    【讨论】:

    • 抱歉,我的问题标题已被某人替换。
    • @NolandPhạm 是的。我希望你不要介意。称它们为“2 字节”字符并不清楚。像ABC这样的字符被称为“fullwidth”。
    【解决方案3】:

    使用 mb_convert_encoding() 将两个字符串带入相同的多字节编码(utf-8 或 $str2 之一),然后您可以像往常一样使用 ==

    比较它们

    【讨论】:

    • 这行不通。 $str1 是 ASCII 并且 ASCII 与前 127 个字符的 unicode 相同。从 unicode 到 ascii 的转换不起作用,因为 ascii 没有 ID 的代码表示
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2012-06-04
    • 2014-12-23
    • 1970-01-01
    相关资源
    最近更新 更多