我有一个UTF8编码的字符串,在字符之间有很多shift + space char,我想用空格替换它们!怎么做?
答案 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;
,以确定库字符编码。