根据以下代码段,我想知道如何删除多个空格的简单preg_replace
如何将字符à
转换为问号:
$str = 'nnn à nnn é nnn';
echo preg_replace('/\s+/', ' ', $str) . "\n";
// outputs 'nnn ? nnn é nnn'
这在使用OSX 10.8.4的Mac上发生。有什么想法吗?
答案 0 :(得分:2)
奇怪。
$ cat test.php
<?php
$str = ' à n';
file_put_contents('a.bin',preg_replace('/\s+/', ' ', $str) . "\n");
file_put_contents('b.bin', 'à');
首先,设置一个包含à
的测试文件,名为c.bin
$ php test.php
然后我们将cat文件进行比较:
$ cat b.bin
à$ cat c.bin
à
文件b.bin
和c.bin
按预期包含à
$ hexdump -C b.bin
00000000 c3 a0 |..|
00000002
$ hexdump -C c.bin
00000000 c3 a0 0a |...|
<00000003></00000003>
感谢hexdump,我们可以假设à
是c3 a0
$ cat a.bin
? n
$ hexdump -C a.bin
00000000 20 c3 20 6e 0a | . n.|
00000005
在第一个文件a.bin
中,没有a0
(NO-BREAK SPACE)并且重音很难呈现
所以它似乎不是编码错误
编辑:
您可以使用mb_ereg_replace或u
修饰符(如HamZa所述):
$ cat test.php
<?php
$str = 'nnn à nnn é nnn';
var_dump(preg_replace('/\s+/u', ' ', $str));
var_dump(mb_ereg_replace('\s+', ' ', $str));
$ php test.php
string(17) "nnn à nnn é nnn"
string(17) "nnn à nnn é nnn"
答案 1 :(得分:0)
您可以使用以下标记在HTML页面中将编码更改为UTF-8:
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
由于您的编码可能存在问题,因此该标记可能会修复它。