首頁 後端開發 php教程 過濾utf8 字元中超過三個位元組的字符,或非utf8字符

過濾utf8 字元中超過三個位元組的字符,或非utf8字符

Jul 29, 2016 am 09:03 AM
amp continue str

function filterUtf8($str)
    {
        /*utf8 编码表:
        * Unicode符号范围           | UTF-8编码方式
        * u0000 0000 - u0000 007F   | 0xxxxxxx
        * u0000 0080 - u0000 07FF   | 110xxxxx 10xxxxxx
        * u0000 0800 - u0000 FFFF   | 1110xxxx 10xxxxxx 10xxxxxx
        *
        */
        $re = '';
        $str = str_split(bin2hex($str), 2);

        $mo =  1<<7;
        $mo2 = $mo | (1 << 6);
        $mo3 = $mo2 | (1 << 5);         //三个字节
        $mo4 = $mo3 | (1 << 4);          //四个字节
        $mo5 = $mo4 | (1 << 3);          //五个字节
        $mo6 = $mo5 | (1 << 2);          //六个字节


        for ($i = 0; $i < count($str); $i++)
        {
            if ((hexdec($str[$i]) & ($mo)) == 0)
            {
                $re .=  chr(hexdec($str[$i]));
                continue;
            }

            //4字节 及其以上舍去
            if ((hexdec($str[$i]) & ($mo6) )  == $mo6)
            {
                $i = $i +5;
                continue;
            }

            if ((hexdec($str[$i]) & ($mo5) )  == $mo5)
            {
                $i = $i +4;
                continue;
            }

            if ((hexdec($str[$i]) & ($mo4) )  == $mo4)
            {
                $i = $i +3;
                continue;
            }

            if ((hexdec($str[$i]) & ($mo3) )  == $mo3 )
            {
                $i = $i +2;
                if (((hexdec($str[$i]) & ($mo) )  == $mo) &&  ((hexdec($str[$i - 1]) & ($mo) )  == $mo)  )
                {
                    $r = chr(hexdec($str[$i - 2])).
                        chr(hexdec($str[$i - 1])).
                        chr(hexdec($str[$i]));
                    $re .= $r;
                }
                continue;
            }



            if ((hexdec($str[$i]) & ($mo2) )  == $mo2 )
            {
                $i = $i +1;
                if ((hexdec($str[$i]) & ($mo) )  == $mo)
                {
                    $re .= chr(hexdec($str[$i - 1])) . chr(hexdec($str[$i]));
                }
                continue;
            }
        }
        return $re;
    }
登入後複製

以上就介紹了過濾utf8 字符中超過三個字節的字符,或者非utf8字符,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

AMP是什麼幣? AMP是什麼幣? Feb 24, 2024 pm 09:16 PM

什麼是AMP幣? AMP代幣是由Synereo團隊於2015年創立,作為Synereo平台的主要交易貨幣。 AMP代幣旨在透過多種功能和用途,為用戶提供更好的數位經濟體驗。 AMP代幣的用途AMP代幣在Synereo平台中擁有多重角色與功能。首先,作為平台的加密貨幣獎勵系統的一部分,用戶能夠透過分享和推廣內容來獲得AMP獎勵,這項機制鼓勵用戶更積極參與平台的活動。 AMP代幣也可用於在Synereo平台上推廣和傳播內容。用戶可以透過使用AMP代幣來提升他們的內容在平台上的曝光率,以吸引更多觀眾來查看和分

Python內建類型str原始碼分析 Python內建類型str原始碼分析 May 09, 2023 pm 02:16 PM

1Unicode電腦儲存的基本單位是位元組,由8個位元組組成。由於英文只由26個字母加若干符號組成,因此英文字元可以直接用位元組來保存。但是其他語言(例如中日韓等),由於字元眾多,不得不使用多個位元組來進行編碼。隨著電腦科技的傳播,非拉丁文字元編碼技術不斷發展,但是仍有兩個比較大的限制:不支援多語言:一種語言的編碼方案不能用於另一種語言沒有統一標準:例如中文就有GBK、GB2312、GB18030等多種編碼標準由於編碼方式不統一,開發人員就需要在不同編碼之間來回轉換,不可避免地會出現很多錯

PHP中continue關鍵字的作用與使用方法 PHP中continue關鍵字的作用與使用方法 Jun 28, 2023 pm 08:07 PM

PHP中continue關鍵字的作用和使用方法在PHP程式設計中,continue是一個非常有用的關鍵字。它用於控制循環語句的執行流程,允許跳過目前循環中的剩餘程式碼,並直接進入下一次循環的執行。 continue的作用是在循環語句中跳過目前迭代中的程式碼,並直接開始下一個迭代。當執行到continue語句時,循環控制會立即轉到循環體的開始處,而不會執行continu

continue是跳出目前循環還是所有循環 continue是跳出目前循環還是所有循環 Feb 02, 2023 pm 04:20 PM

continue是跳出目前循環。 continue語句用於跳過本循環,執行下次循環;當遇到continue語句時,程式會立即重新偵測條件表達式,如果表達式結果為真則開始下次循環,如果表達式結果為假則退出循環。

Python中__str__和__repr__有什麼異同點 Python中__str__和__repr__有什麼異同點 Apr 29, 2023 pm 07:58 PM

__str__和__repr__有什麼異同?字串的表示形式我們都知道,Python的內建函數repr()能夠把物件用字串的形式表達出來,方便我們辨認。這就是“字串表示形式”。 repr()就是透過__repr__這個特殊方法得到一個物件的字串表示形式的。如果沒有實作__repr__,當我們在控制台裡列印一個向量的實例時,得到的字串可能會是。 >>>classExample:pass>>>print(str(Example()))>>>

JS循環學習:跳出迴圈語句break和continue JS循環學習:跳出迴圈語句break和continue Aug 03, 2022 pm 07:08 PM

在之前的文章中,我們帶大家學習了JS中的幾種循環控制結構(while和do-while循環、for循環),下面聊聊跳出循環語句break和continue,希望對大家有所幫助!

揭秘Go語言中str的奧秘 揭秘Go語言中str的奧秘 Mar 29, 2024 am 11:27 AM

Go語言是一種快速、簡潔、高效的開源程式語言,越來越受到程式設計師的喜愛和歡迎。字串(string)是程式中經常使用的資料類型之一,在Go語言中也有著獨特的處理方式。本文將帶領讀者揭秘Go語言中字串(str)的奧秘,並透過具體的程式碼範例來解析其用法和特點。字串的定義和初始化在Go語言中,字串是以雙引號""包裹的字元序列,例如:str

java的continue語句怎麼使用 java的continue語句怎麼使用 Apr 26, 2023 am 11:43 AM

說明1、continue語句是指跳過循環中剩餘的語句,強制執行下一個循環,其作用是結束這個循環,即跳過循環中下面還沒有執行的語句,然後判斷下一個循環是否執行。 2.continue語句與break語句相似,但只能出現在迴圈中。實例intsum=0;for(inti=1;i

See all articles