0

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

4

1 回答 1

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 vu”。

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

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

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

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

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

于 2013-01-05T10:35:09.447 回答