PHP utf8问题

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP utf8问题脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
将数组与挪威字符与utf8字符进行比较时遇到一些问题.

除特殊挪威字符(æ,ø,å)外的所有字符都可以正常工作.

function isNorwegianChar($Char)
{
    $aNorwegianChars = array('a','A','b','B','c','C','d','D','e','E','f','F','g','G','h','H','i','I','j','J','k','K','l','L','m','M','n','N','o','O','p','P','q','Q','r','R','s','S','t','T','u','U','v','V','w','W','x','X','y','Y','z','Z','æ','Æ','ø','Ø','å','Å','=','(',')',' ','-');
    $iArrayLength = count($aNorwegianChars);

    for($iCount = 0; $iCount < $iArrayLength; $iCount++)
    {
        if($aNorwegianChars[$iCount] == $Char)
        {
            return true;
        }
    }

    return false;

}

如果有人知道我能做什么,请告诉我.

更新:

需要这个的原因是我试图解一个包含挪威语和中文单词的文本文件,比如字典.我想把这行分成字符串,一行包含挪威语,一行包含中文.稍后将将其插入数据库中.示例行:

impulsiv形冲动的

imøtegå动反对,反驳

imøtekomme动符合

alkoholmisbruk(er)名滥用酒精(名滥用酒精的人)

alkoholpåvirket形受酒精影响的

alkotest名呼吸性酒精测试

alkymi(st)名炼金(名炼金术士)

all,alt,alle,形全部,所有

正如你所看到的那样,这些单词之间可能存在空格,所以我不能使用像爆炸这样简单的东西来分割中文和挪威语.我所做的是使用isNorwegianChar并遍历该行,直到找到不在数组中的char.

问题在于æ,ø和å不是作为挪威人回归的,它认为中文这个词已经开始了.

这是代码

//OPEn file.
$rFile = fopen("norsk-kinesisk.txt","r");

// Loop through the file.
$Count = 0;
while(!feof($rFile))
{
    if(40== $Count)
    {
        break;
    }

    $sLine = fgets($rFile);

    if(0 == $Count)
    {
        $sLine = mb_substr($sLine,3);
    }

    $iLineLength        = strlen($sLine);
    $bChineseHasStarted = false;
    $sNorwegianWord     = '';
    $sChineseWord       = '';
    for($iCount2 = 0; $iCount2 < $iLineLength; $iCount2++)
    {
        $char = mb_substr($sLine,$iCount2,1);

        if(($bChineseHasStarted === false) && (false == isNorwegianChar($char)))
        {
            $bChineseHasStarted = true;
        }

        if(false === $bChineseHasStarted)
        {
            $sNorwegianWord .= $char;
        }
        else
        {
            $sChineseWord .= $char;
        }

        //echo $char;
    }

    $sNorwegianWord = trim($sNorwegianWord);
    $sChineseWord = trim($sChineseWord);

    $Count++;
}

fclose($rFile);

解决方法

如果您的PHP脚本文件具有ANSI编码而不是UTF-8,那么在字节级别上,这些挪威字符将与它们以UTF-8编码时的字符不同.由于PHP是一种字节处理语言,而不是文本处理语言,因此它会对字节序列进行适当的比较,并得出它们不匹配的结论.

解决此问题,您可以确保PHP脚本与您要比较的字符集具有相同的编码,或者您可以使用iconv或mbstring库转换为适当的字符集.

另外,如果您还没有阅读,请阅读:http://www.joelonsoftware.com/articles/Unicode.html

更新:您要考虑的另一点是确保您传入此功能内容符合您的想法.如果您使用数组索引运算符一次循环一个字符串一个字符,它将无法工作,因为您的UTF-8字符串可能使用两个字节(两个数组索引位置)来存储一个字符. mbstring中有函数根据字符位置而不是字节位置从字符串中复制文本.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP utf8问题全部内容,希望文章能够帮你解决PHP utf8问题所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。