小弟用PHP 寫檔
遇到要寫入全形空白的狀況
率先嘗試寫& emsp;
但是這在txt檔中貌似不會變成全形空白
會直接寫出"& emsp;"出來
改用直接打出全行空白的方式(這 樣)
但一段文字全部都變亂碼
我有查過資料
可能跟編碼有關 但我也有嘗試過把全形空白轉big5或UTF-8
但還是一堆亂碼
還有其他方法能輸出全形空白嗎?
簡單試了一下,下面的demo執行後會生成一個"test.txt"
<?php
$Handle = fopen("test.txt", 'w');
$fullWidthSpace=' ';
$Data ='1測試'.$fullWidthSpace.'看看喔';
$Data.="\n換行\n";
$Data.='2測試'.$fullWidthSpace.'看看喔';
fwrite($Handle, $Data);
fclose($Handle);
?>
test.txt 內容為:
1測試 看看喔
換行
2測試 看看喔
在PHP裡面可以用單引號(')跟雙引號(")來包含字串,如果字串內容是不變的通常會建議用單引號來包含(效能較好),會用到雙引號通常是字串裡面包含一些變數或是要換行這種,例如:
$tmpVar='aloha';
$data="My nickname is $tmpVar.\nHow do you do?";
// 若印出$data為 My nickname is aloha.
// How do you do?
但如果是直接把全形空白用雙引號包含進去會出錯,例如:
$fullWidthSpace=' ';
$Data ="測試$fullWidthSpace看看喔";
//這樣會有問題
改成用單引號加上.(PHP的字串連接符)來處理就不會有問題了,例如:
$fullWidthSpace=' ';
$Data ='測試'.$fullWidthSpace.'看看喔';
//這樣不會有問題
為何會有這種bug,我猜是跟Unicode長度切割有關,相關資訊參考:
https://alrin0000.blogspot.com/2014/03/unicodeutf-8utf-16.html
奇怪這方法我會變成亂碼
可能是編碼的問題我找找看
大大指教的是
我所有字串都用雙引號哈哈
用notepad開是亂碼
用notepad++開來看是正常 只是有奇怪的編碼標示
會變亂碼的話 可能是編輯器問題 你試試用 notepad++編輯看看?(文件編碼要設為UTF-8)
然後就是把有用到全形空白的字串全改成用單引號加.的方式連接,理論上應該就沒問題了。
還有要注意字串內容是不是Big5編碼,如果是Big5碼直接轉UTF-8某些字變???是正常的,詳情請Google "許功蓋",這個現在應該很少見了,比較常見在老舊軟體或資料庫要從Big5升UTF-8時。
然後就是把有用到全形空白的字串全改成用單引號加.的方式連接,理論上應該就沒問題了。
可是大大
我需要全形空白的程式碼
都長這樣
str_pad("蘇XX",50,$fullWidthSpace)
這樣也不會有單引號和.的問題吧QQ
可是大大
我需要全形空白的程式碼
都長這樣
str_pad("蘇XX",50,$fullWidthSpace)
這樣也不會有單引號和.的問題吧QQ
這個我不知道 因為我不清楚你的 str_pad 函式是怎麼寫的
你貼的這行 str_pad("蘇XX",50,$fullWidthSpace)
就是呼叫一個函式 str_pad
並傳入三個參數 "蘇XX" 50 $fullWidthSpace
你應該去看 function str_pad(...) 是怎麼處理傳入參數的,然後依照正確的方式修改字串連接的部份。
謝謝大大
我處理好了 我額外寫了一個utf-8專用的str_pad
輸出就可以正常了
GOOD JOB!
str_pad 是用每個 byte 去算長度的
所以如果要的話是這樣用
$ws=' '; //全形空白
$str='測試';
$padLen=strlen($ws)*2+strlen($str); //計算加2個全形空白總長
$output=str_pad($str, $padLen, $ws, STR_PAD_LEFT);
echo $output;
另外 str_repeat 也可以參考
echo str_repeat(' ', 2).'測試';
原來 str_pad 是PHP內建函式喔 這東東我還真的沒用過 哈哈
str_pad 是用每個 byte 去算長度的
所以如果要的話是這樣用
受教了
確認以下
\xEF\xBB\xBF
)