我有一个 UTF8 编码的字符串,在字符之间有很多 shift+space 字符,我想用空格替换它们!怎么做?
问问题
484 次
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 回答