- 101 月
-
PHP preg_replace 使用注意事項
preg_replace http://www.php.net/manual/en/function.preg-replace.php
當使用 preg_replace 作關鍵字批次 pattern 替換時, 要小心避免關鍵字巢狀替換的問題, 要先替換成獨一無二的代碼,再從代碼替換回來。
錯誤用法:
<?php // 以下將替換成: // 北捷<a href="#2"><a href="#3">蘆洲</a>線</a>通車,悠遊卡免費試乘1個月 $string = '北捷蘆洲線通車,悠遊卡免費試乘1個月'; $pattern = $replace = array(); $pattern[0] = '/蘆洲站/'; $pattern[1] = '/蘆洲線/'; $pattern[2] = '/蘆洲/'; $replace[0] = '<a href="#1">蘆洲站</a>'; $replace[1] = '<a href="#2">蘆洲線</a>'; $replace[2] = '<a href="#3">蘆洲</a>'; $string = preg_replace($pattern, $replace, $string); echo $string . '<br />' . PHP_EOL; ?>
正確用法:
<?php // 以下將替換成: // 北捷<a href="#2">蘆洲線</a>通車,悠遊卡免費試乘1個月 $string = '北捷蘆洲線通車,悠遊卡免費試乘1個月'; $pattern = $replace = array(); $patternTemp = $replaceTemp = array(); $pattern[0] = '/蘆洲站/'; $pattern[1] = '/蘆洲線/'; $pattern[2] = '/蘆洲/'; $replace[0] = '<a href="#1">蘆洲站</a>'; $replace[1] = '<a href="#2">蘆洲線</a>'; $replace[2] = '<a href="#3">蘆洲</a>'; $patternTemp[0] = '/{DS_CODE_0}/'; $patternTemp[1] = '/{DS_CODE_1}/'; $patternTemp[2] = '/{DS_CODE_2}/'; $replaceTemp[0] = '{DS_CODE_0}'; $replaceTemp[1] = '{DS_CODE_1}'; $replaceTemp[2] = '{DS_CODE_2}'; $string = preg_replace($pattern, $replaceTemp, $string); $string = preg_replace($patternTemp, $replace, $string); echo $string . '<br />' . PHP_EOL; ?>
另外在使用 preg_replace 作字串比對替換時,若 DB 為 BIG5 編碼,也要小心雙位元字碼交錯,
所造成的比對錯誤問題,這裡在處理時要特別小心,免得一失足成千古恨- 先將 PHP 程式本身轉為 UTF8 (無BOM) 編碼,以便程式內的字串資料轉為 UTF8 編碼。
- 從 BIG5 編碼 DB 抓出資料後先轉成 UTF8 編碼。
- 進行 preg_replace 字串比對替換。
- 最後進 DB 前,再將 UTF8 轉回 BIG5 編碼。
Posted by admin Posted on 10 1 月
Post Comments 0