0

根据以下代码,我想知道一个简单的preg_replace旨在删除多个空格的简单字符如何将字符à变成问号:

$str = 'nnn      à    nnn     é  nnn';
echo preg_replace('/\s+/', ' ', $str) . "\n";
// outputs 'nnn ? nnn é nnn'

这发生在使用 OSX 10.8.4 的 Mac 上。任何想法?

4

2 回答 2

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.binc.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没有a0NO-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"
于 2013-08-25T18:48:57.343 回答
0

您可以使用以下标记将 HTML 页面中的编码更改为 UTF-8:

<meta http-equiv="Content-type" content="text/html; charset=utf-8">

由于这可能是您的编码问题,因此该标签可能会修复它。

于 2013-08-25T19:23:10.183 回答