根据以下代码,我想知道一个简单的preg_replace
旨在删除多个空格的简单字符如何将字符à
变成问号:
$str = 'nnn à nnn é nnn';
echo preg_replace('/\s+/', ' ', $str) . "\n";
// outputs 'nnn ? nnn é nnn'
这发生在使用 OSX 10.8.4 的 Mac 上。任何想法?
奇怪的。
$ 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"
您可以使用以下标记将 HTML 页面中的编码更改为 UTF-8:
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
由于这可能是您的编码问题,因此该标签可能会修复它。