mb_substitute_character的作用是設置多字節字符串函數( mb_convert_encoding等)在轉換時,遇到無法轉換的字符所替代的字符。它的函數原型如下:
mb_substitute_character([ mixed $substchar = null ]): mixed
參數$substchar :可選,指定替代字符的類型。
返回值:如果傳入參數,返回之前的替代字符設置;如果不傳參數,返回當前的替代字符設置。
$substchar參數可以接受以下類型的值:
整數值(0-255)
代表單字節字符的ASCII碼。例如:
mb_substitute_character(63); // 設置替代字符為ASCII的問號 '?'
字符串<br> 可以傳入字符串,表示具體的替代字符例如:
mb_substitute_character('?'); // 使用“替代字符”符號(U+FFFD)
預定義常量
PHP內置了幾個常用的替代字符常量:
MB_SUBSTITUTE_NONE :不替代,遇到錯誤字符直接丟棄。
MB_SUBSTITUTE_CHARACTER :使用替代字符(通常是“?”或“?”)。
MB_SUBSTITUTE_ENTITY :使用HTML實體替代。
MB_SUBSTITUTE_STRING :自定義替代字符串(需額外配合mb_substitute_character設置)。
例如:
mb_substitute_character(MB_SUBSTITUTE_CHARACTER);
傳入非法的數字或字符串<br> 許多初學者會隨意傳入一個數字或字符串,導致替代字符設置無效或出現意外結果mb_substitute_character要求數字必須在0-255之間,字符串必須是單個字符或預定義常量。
忽略返回值<br> 這個函數會返回之前的替代字符設置,忽略返回值可能會導致在復雜程序中難以追踪當前替代字符狀態
誤用常量名<br> 有時會拼寫錯誤或者用錯常量例如,寫成MB_SUBSTITUTE_CHAR而不是MB_SUBSTITUTE_CHARACTER ,導致報錯。
混淆替代字符與編碼設置
mb_substitute_character只設置替代字符,與mb_internal_encoding或mb_detect_encoding無直接關係,但容易被誤解。
<?php
// 設置替代字符為问号 '?'
mb_substitute_character(63);
$str = "こんにちは世界"; // "Hello world"日文
// 故意使用錯誤編碼轉換
$converted = mb_convert_encoding($str, "ASCII", "UTF-8");
echo $converted; // 無法轉換的字符被替代為 '?'
?>
更多細節可以查看PHP官方文檔:
<code> https://gitbox.net/manual/zh/function.mb-substitute-character.php </code>