php中字符串替換時導致的亂碼,php防止亂碼的代碼

本文目錄一覽:

請問下php怎麼處理截取字符串出現的亂碼問題

利用php內置方法mb_substr截取不亂碼;

1、GBK編碼截取示例:

$str

=

‘我是誰’;

//gbk編碼的字符串

echo

mb_substr($str,

0,

1,

‘gbk’);

//輸出

mb_substr方法比substr多一個參數,用來指定字符串編碼。

2、utf-8編碼截取示例:

[code]

$str

=

‘我abc是誰’;

//utf-8編碼的字符串

echo

mb_substr($str,

0,

2,

‘utf-8’);

//輸出

我a

[/code]

中英混合也完全沒有問題。

php中字符串變量亂碼問題

在做php類型的web程序時,文件亂碼都是由編碼問題造成的 影響這個因素有四個地方:

1. 文件本身的編碼 我們在用記事本或者editplus dw utraledit一類的工具保存文件的時候可以選擇的 記事本默認是ansi 另外還有utf8一類的選項

2. html文件的編碼 就是頁面上 meta charset=“gb2312” 這樣的

3.數據庫的編碼 就是在建立數據庫的時候選擇的 如果是中文的你可以選擇 gb2312 或者是 gbk

4.程序和數據庫連接時候的編碼 就是你說的 “set names gb2312實現的功能”

只要這四個方面都正確協調 就不會出現任何問題 當然有時候我們的一些設置可能有問題 但是也不影響程序的運行 比如數據庫方面 錯着進去 錯着出來【換句話說怎麼進去怎麼出來 雖然在裡面的時候不對 但是出來還是對的】 程序也能正常跑起來 但是從嚴格上講 這是不合適的

根據上面的分析 你的描述 我想可能是你的文件類型 保存成了utf 或者 unicode類型的

PHP 中用 explode 函數切割中文字符串,會出現亂碼.如何解決

亂碼指的是計算機系統不能顯示正確的字符,而顯示其他無意義的字符或空白,如一堆ASCII Code。所顯示出來的文字統稱為亂碼。亂碼是因為所使用的字符的源碼在本地計算機上使用了錯誤的顯示字庫,或在本地計算機的字庫中找不到相應於源碼所指代的字符所致。

通俗點講:

亂碼就是你打開王頁或郵箱,裡面的字不是全中文的,而是一些亂七八糟莫名其妙的無意義的字符組合在一起。主要是計算機的字庫出錯所致。

1一般出現在網頁,用網頁上面的查看——編碼——簡體中文即可解決。

2 出現亂碼一般是Windows系統字庫的問題,可能是系統錯誤或不正常關機造成的,也可能是某些軟件需要使用操作系統以外的字庫造成的。解決辦法得看具體的問題,一般情況下的Windows亂碼可以通過以下三種方法解決。

第一種方法是下載 解決Windows XP SP2亂碼補丁 V1.00 (華軍軟件園)

第二種是解決Windows系統錯誤造成的亂碼問題,重啟後用F8鍵激活系統菜單,進入安全模式。等系統檢查完畢,硬盤沒有響應後再重新正常退出並重新啟動計算機,正常進入Windows,字體一般就能自動恢復。這是因為Windows在進入安全模式時會重新索引字庫及整理菜單。

第三種解決方法用於修正軟件造成的註冊表中關於字體部分設置出錯的問題。運行“Regedit”啟動註冊表編輯器。在“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\fontassoc”鍵下有 “Associated CharSet”和“Associated DefaultFonts” 兩個鍵。當出現漢字亂碼時,這兩個鍵中的內容就可能不正確甚至不完整。它們的正確內容應該是“Associated CharSet”內有“(默認)、ANSI(00)、GB2312(86)、OEM(FF)、SYMBOL(02)”幾項串值,鍵值分別為“(未設置鍵值)、Yes、Yes、Yes、No”,而“Associated DefaultFonts”內有“(默認)、AssocSystemFont、FontPackegeDecorative、FontPackegeDontCare、FontPackegeModern、FontPackegeRoman、FontPackegeScript、FontPackegeSwiss”幾項串值,鍵值分別為“(未設置鍵值)、simsun.ttf、宋體、宋體、宋體、宋體、宋體、宋體”。重新啟動系統後漢字就應該顯示正確了。建議您在修改前先備份註冊表,以防修改錯誤使系統出現問題。

PHP中使用substr截取字符串出現中文亂碼問題該怎麼辦

在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的一部份字符串,由參數 start和 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”

?

對於英文沒有問題,我們測試一個中文

?php

$rest = substr (“中國人”, 1, -1); // returns “fdsafsda” 就是亂碼了

?

這種截取字符的結果,肯定不是我們想要的結果,這種出現PHP substr中文亂碼的情況,可能會導致程序無法正常運行。解決辦法主要有兩種:

一、使用mbstring擴展庫的mb_substr()截取就不會出現亂碼了。

可以用mb_substr()/mb_strcut()這個函數,mb_substr()/mb_strcut()的用法與substr()相似,

只是在mb_substr()/mb_strcut最後要加入多一個參數,以設定字符串的編碼,但是一般的服務器都沒打開

php_mbstring.dll,需要在php.ini在把php_mbstring.dll打開。

?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 個長度單位。

substr 有時會截 1/3 個中文或半個中文,會顯示亂碼,相對來說 mb_substr 更適合我們使用。不過有時候 mb_substr

就顯得不那麼好用了。例如我要顯示一個小圖片的簡要信息,5 個中文正好,超過 5 個就截取前4再加上

”…”,這樣處理中文是沒問題了,可是處理英文或數字,這樣截取就太短了。

二、自己書寫截取函數,但效率不如用mbstring擴展庫來得高。下面是ecshop裡面的截取UTF-8編碼下字符串的函數。

function sub_str($str, $length = , $append = true)

{

$str = trim($str);

$strlength = strlen($str);

if ($length == || $length = $strlength)

{

return $str; //截取長度等於或大於等於本字符串的長度,返回字符串本身

}

elseif ($length ) //如果截取長度為負數

{

$length = $strlength + $length;//那麼截取長度就等於字符串長度減去截取長度

if ($length )

{

$length = $strlength;//如果截取長度的絕對值大於字符串本身長度,則截取長度取字符串本身的長度

}

}

if (function_exists(‘mb_substr’))

{

$newstr = mb_substr($str, , $length, EC_CHARSET);

}

elseif (function_exists(‘iconv_substr’))

{

$newstr = iconv_substr($str, , $length, EC_CHARSET);

}

else

{

//$newstr = trim_right(substr($str, , $length));

$newstr = substr($str, , $length);

}

if ($append $str != $newstr)

{

$newstr .= ‘…’;

}

return $newstr;

}

同一個PHP文件中用substr_replace函數時出現亂碼問題,用str_ireplace函數時正常,究竟問題出在哪兒了

需要從寫 該函數

if($length strlen($string) $length) {

//截斷字符

$wordscut = ”;

if(strtolower($encoding) == ‘utf-8’) {

//utf8編碼

$n = 0;

$tn = 0;

$noc = 0;

while ($n strlen($string)) {

$t = ord($string[$n]);

if($t == 9 || $t == 10 || (32 = $t $t = 126)) {

$tn = 1;

$n++;

$noc++;

} elseif(194 = $t $t = 223) {

$tn = 2;

$n += 2;

$noc += 2;

} elseif(224 = $t $t 239) {

$tn = 3;

$n += 3;

$noc += 2;

} elseif(240 = $t $t = 247) {

$tn = 4;

$n += 4;

$noc += 2;

} elseif(248 = $t $t = 251) {

$tn = 5;

$n += 5;

$noc += 2;

} elseif($t == 252 || $t == 253) {

$tn = 6;

$n += 6;

$noc += 2;

} else {

$n++;

}

if ($noc = $length) {

break;

}

}

if ($noc $length) {

$n -= $tn;

}

$wordscut = substr($string, 0, $n);

} else {

for($i = 0; $i $length – 1; $i++) {

if(ord($string[$i]) 127) {

$wordscut .= $string[$i].$string[$i + 1];

$i++;

} else {

$wordscut .= $string[$i];

}

}

}

$string = $wordscut;

}

return trim($string);

}

這個函數 就不會有亂碼了

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/201159.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-06 11:30
下一篇 2024-12-06 11:30

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python中將字符串轉化為浮點數

    本文將介紹在Python中將字符串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字符串轉化為…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python zipfile解壓文件亂碼處理

    本文主要介紹如何在Python中使用zipfile進行文件解壓的處理,同時詳細討論在解壓文件時可能出現的亂碼問題的各種解決辦法。 一、zipfile解壓文件亂碼問題的根本原因 在P…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python學習筆記:去除字符串最後一個字符的方法

    本文將從多個方面詳細闡述如何通過Python去除字符串最後一個字符,包括使用切片、pop()、刪除、替換等方法來實現。 一、字符串切片 在Python中,可以通過字符串切片的方式來…

    編程 2025-04-29

發表回復

登錄後才能評論