中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何刪除非utf8字符

發布時間:2021-06-11 11:19:51 來源:億速云 閱讀:223 作者:小新 欄目:編程語言

小編給大家分享一下php如何刪除非utf8字符,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

php刪除非utf8字符的方法:首先創建一個PHP示例文件;然后使用正則表達式“preg_replace($regex, '$1', $text);”方法刪除非utf8字符即可。

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

具體問題:

php怎么刪除非utf8字符?

php 從字符串中刪除非UTF8字符

我在從字符串中刪除非utf8字符時出現問題,這些字符無法正確顯示。像這樣的字符0x97 0x61 0x6C 0x6F(十六進制表示)

刪除它們的最佳方法是什么?正則表達式還是其他?

解決辦法:

使用正則表達式方法:

$regex = <<<'END'
/
  (
    (?: [\x00-\x7F]                 # single-byte sequences   0xxxxxxx
    |   [\xC0-\xDF][\x80-\xBF]      # double-byte sequences   110xxxxx 10xxxxxx
    |   [\xE0-\xEF][\x80-\xBF]{2}   # triple-byte sequences   1110xxxx 10xxxxxx * 2
    |   [\xF0-\xF7][\x80-\xBF]{3}   # quadruple-byte sequence 11110xxx 10xxxxxx * 3 
    ){1,100}                        # ...one or more times
  )
| .                                 # anything else
/x
END;
preg_replace($regex, '$1', $text);

它搜索UTF-8序列,并將其捕獲到組1中。它還匹配無法識別為UTF-8序列的一部分的單個字節,但不捕獲這些字節。替換是捕獲到組1中的任何內容。這將有效刪除所有無效字節。

通過將無效字節編碼為UTF-8字符,可以修復字符串。但是,如果錯誤是隨機的,則可能會留下一些奇怪的符號。

$regex = <<<'END'
/
  (
    (?: [\x00-\x7F]               # single-byte sequences   0xxxxxxx
    |   [\xC0-\xDF][\x80-\xBF]    # double-byte sequences   110xxxxx 10xxxxxx
    |   [\xE0-\xEF][\x80-\xBF]{2} # triple-byte sequences   1110xxxx 10xxxxxx * 2
    |   [\xF0-\xF7][\x80-\xBF]{3} # quadruple-byte sequence 11110xxx 10xxxxxx * 3 
    ){1,100}                      # ...one or more times
  )
| ( [\x80-\xBF] )                 # invalid byte in range 10000000 - 10111111
| ( [\xC0-\xFF] )                 # invalid byte in range 11000000 - 11111111
/x
END;
function utf8replacer($captures) {
  if ($captures[1] != "") {
    // Valid byte sequence. Return unmodified.
    return $captures[1];
  }
  elseif ($captures[2] != "") {
    // Invalid byte of the form 10xxxxxx.
    // Encode as 11000010 10xxxxxx.
    return "\xC2".$captures[2];
  }
  else {
    // Invalid byte of the form 11xxxxxx.
    // Encode as 11000011 10xxxxxx.
    return "\xC3".chr(ord($captures[3])-64);
  }
}
preg_replace_callback($regex, "utf8replacer", $text);

編輯:

  • !empty(x)將匹配非空值("0"被認為是空的)。

  • x != ""將匹配非空值,包括"0"。

  • x !== ""將匹配""以外的任何內容。

在這種情況下,x != ""似乎是最好的選擇。

我也加快了比賽速度。而不是單獨匹配每個字符,它匹配有效的UTF-8字符序列。

以上是“php如何刪除非utf8字符”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

灵石县| 康保县| 资阳市| 庆安县| 茌平县| 阿鲁科尔沁旗| 开江县| 辽源市| 天镇县| 浦县| 丽江市| 漳平市| 博乐市| 建阳市| 青州市| 裕民县| 图木舒克市| 武冈市| 云阳县| 凤翔县| 汕尾市| 兰考县| 余姚市| 泰和县| 五台县| 陆川县| 奉贤区| 华亭县| 友谊县| 东乌| 偏关县| 弥勒县| 当涂县| 馆陶县| 双鸭山市| 东城区| 平顶山市| 黄大仙区| 孟州市| 修水县| 桐梓县|