转移+空间的正则表达式

时间:2013-01-05 10:11:37

标签: php

我有一个UTF8编码的字符串,在字符之间有很多shift + space char,我想用空格替换它们!怎么做?

1 个答案:

答案 0 :(得分:0)

最简单的方法是在正则表达式中使用半个空格:

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

如果您的源文件是UTF8编码的(因此regexp 中的斜杠之间的东西实际上是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");

输出&#34; D(E)ja vu&#34;在我的系统上。

注意:您确定是否需要正则表达式? str_replace可能更快,根本不需要十六进制代码:

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

UPDATE :您也可以直接在MySQL中执行上述操作(首先备份数据库;-)):

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

(您可能需要先发出SET NAMES UTF8;,以确定库字符编码。