在PHP程式開發中,經常會執行字串的截取操作,例如輸出資訊清單時,標題不宜過長,列印文章摘要時,也要執行一系列的字串截取操作。當我們遇到這些需求時,我們常常會想到使用substr()方法來實現,substr()對全英文字串的截取是比較適合的
但字串只要出現中文字符,就有可能導致PHP substr中文亂碼,因為中文UTF-8編碼,每個漢字佔3字節,而GB2312佔2字節,英文佔1字節,截取位數不準確,substr()硬生生地將一個中文字符“鋸「成兩半,造成斷開的字符會把其後的..拉過來一起做一個字,所以出現了PHP substr中文亂碼。
substr --- 取得部份字串
語法: string substr (string string, int start [, int length])
說明:
substr( )傳回string的一部份字串,由參數startstart和length指定。
如果 start是正數,傳回的字串將會從 string的第 start個字元開始。
Example :
<?php $rest = substr ("abcdef", 1); // returns "bcdef" $rest = substr ("abcdef", 1, 3); // returns "bcd" ?>
如果 start是負數,傳回的字串將會從 string結尾的第 start個字開始。
Example :
<?php $rest = substr ("abcdef", -1); // returns "f" $rest = substr ("abcdef", -2); // returns "ef" $rest = substr ("abcdef", -3, 1); // returns "d" ?>
如果有給予參數 length而且是正數時,傳回的字串將會從 start傳回 length個字符。
如果有給予參數 length而且是負數時,傳回的字串將會結束於 string結尾的第 length個字符。
Example :
<?php $rest = substr ("abcdef", 1, -1); // returns "bcde" ?>
對於英文沒有問題,我們測試一個中文
Example :
<?php $rest = substr ("中国人", 1, -1); // returns "fdsafsda" 就是乱码了 ?>
這個中文的文字亂碼的情況,可能會導致程式無法正常運作。解決方法主要有兩種:
一、使用mbstring擴充函式庫的mb_substr()截取就不會出現亂碼了。
<?php echo mb_substr("php中文字符encode",0,4,"utf-8"); ?>
如果未指定最後一個編碼參數,會是三個位元組為一個中文,這就是utf-8編碼的特點,若加上utf-8字符集說明,所以,是以一個字為單位來截取的。
使用的時候要注意php檔案的編碼,和網頁顯示時的編碼。使用這個mb_substr方法事先知道字串的編碼,如果不知道編碼,就需要判斷,mbstring函式庫也提供了mb_check_encoding來檢驗字串編碼,但還不完善。
PHP 自帶幾種字串截取函數,其中常用到的就是 substr 和 mb_substr。前者在處理中文時,GBK 為 2 個長度單位,UTF 為 3 個長度單位,後者指定編碼後,一個中文即為 1 個長度單位。
二、自己書寫截取函數,但效率不如用mbstring擴充函式庫來得高。下面是ecshop裡面的截取UTF-8編碼下字串的函數。
function sub_str($str, $length = 0, $append = true) { $str = trim($str); $strlength = strlen($str); if ($length == 0 || $length >= $strlength) { return $str; //截取长度等于0或大于等于本字符串的长度,返回字符串本身 } elseif ($length <p> </p> 以上就介紹了PHP substr截取字串時,中文出現亂碼的問題解決,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 <p> </p> <p></p>

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

在PHP中,可以利用implode()函数的第一个参数来设置没有分隔符,该函数的第一个参数用于规定数组元素之间放置的内容,默认是空字符串,也可将第一个参数设置为空,语法为“implode(数组)”或者“implode("",数组)”。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

使用Java的String.length()函数获取字符串的长度在Java编程中,字符串是一种非常常见的数据类型,我们经常需要获取字符串的长度,即字符串中字符的个数。在Java中,我们可以使用String类的length()函数来获取字符串的长度。下面是一个简单的示例代码:publicclassStringLengthExample{publ


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境