2013-01-05 42 views
0

我有一個UTF8編碼的字符串,在字符之間有許多shift +空格字符,我想用空格替換它們!如何做到這一點?用於shift +空格的正則表達式

+0

你的意思是標籤?... – Shoe

+0

你可以用'preg_replace('〜\ h +〜','',$ string)替換所有的空白字符;' –

+5

什麼是「shift + space」? –

回答

0

最簡單的方法是隻用一個半空間到的正則表達式:

$new = preg_replace("/ /", "-SPACE-", $yourstring); 

前提是你的源文件UTF8編碼(因此,在正則表達式斜槓之間的事情是實際上是UTF8半空間),你的PHP有完整的UTF8支持(我相信所有的安裝都是自5.0以後的某個時候開始的,但你永遠不知道......)。

如果你不能做到這一點,並需要UTF8十六進制表示,你可以做一個十六進制轉儲的文件(或最短的文件,你可以與字符在裏面),並找出代碼是什麼。你會看到類似C3 A0的東西,你會知道你可以使用/...\xc3\xa0.../作爲正則表達式;請記住反斜槓可能需要被轉義。否則,你可以做這樣的事情 - 我使用另一個UTF8字符,因爲我不知道你的編輯器用作「半空間」 - 你只需要準備一個字符串並將其解碼PHP。

<?php 
    $string = "é"; // THE SOURCE FILE MUST BE UTF8 CODED, OF COURSE... 
    $hex = bin2hex($string); 
    $seq = str_split($hex, 2); 
    $search = "\\x".implode("\\x", $seq); 

    print "The sequence is $search .\n"; 
?> 

現在,如果你想用它變成一個替代正則表達式,你只需將其插入:

print preg_replace("/$search/", "(E)", "Déja vu"); 

輸出 「d(E)JA似曾相識」 我的系統上。

備註:你是肯定你需要一個正則表達式嗎? str_replace可能更快,並在所有不需要的十六進制代碼:

$new = str_replace(" ", " ", $old); // The first space is really a "half space" 

UPDATE:你能做到以上直接在MySQL太(使DB的備份第一;-)):

UPDATE table SET field = REPLACE(field, '<A HALF SPACE HERE>', ' '); 

(您可能需要首先發出SET NAMES UTF8;,以確定庫字符編碼)。