为什么会有�在我的页面上

发布于 2024-12-10 10:35:40 字数 906 浏览 1 评论 0原文

我已经设置了页面默认字符集和 MySQL 表字符集 utf8。在某些页面上运行良好,但在某些页面上输出某些汉字如“全”、“公”时显示为�,而在其他页面上却可以正常输出。
唯一的区别通常页面和错误页面我意识到我在错误页面上输出之前使用了一些 ereg_replace 。

                $sounds = nl2br($model->sounds);
                $sounds= preg_replace('/(\v|\s)+/', ' ', $sounds);
                $sounds= preg_replace("#(<br />|<br /> )+[< b r > \  ]*[<br />| <br /> ]+#","<br>",$sounds);
                $pattern='#[\d]+[\-]*[\d]*[\.]+#';
                if(preg_match($pattern,$sounds)&&!preg_match('#<br />|<br />|<br>#',$sounds))
                {
                    $sounds= preg_replace("#[\d]+[\-]*[\d]*[\.]+#","<br>",$sounds);
                }

这些功能可能是原因吗?或者还有什么原因呢?

更新:
我在评论 $sounds= preg_replace('/(\v|\s)+/', ' ', $sounds); 时发现工作正常,但我想使用这一行删除数据中的多个空格。有什么替代方法可以做到这一点?

I've already set my page default charset and MySQL table charset utf8. It works well on some of the pages, but on some pages when output some certain Chinese characters like '全' and '公' it appears to be � while on other pages they can be output normally.
The only difference between the normally pages and the error pages i realize is I used some ereg_replace before output on the error page.

                $sounds = nl2br($model->sounds);
                $sounds= preg_replace('/(\v|\s)+/', ' ', $sounds);
                $sounds= preg_replace("#(<br />|<br /> )+[< b r > \  ]*[<br />| <br /> ]+#","<br>",$sounds);
                $pattern='#[\d]+[\-]*[\d]*[\.]+#';
                if(preg_match($pattern,$sounds)&&!preg_match('#<br />|<br />|<br>#',$sounds))
                {
                    $sounds= preg_replace("#[\d]+[\-]*[\d]*[\.]+#","<br>",$sounds);
                }

Could these functions be the reason? Or what else could the reason be?

Update:
I found when I comment $sounds= preg_replace('/(\v|\s)+/', ' ', $sounds); it works fine, but i want to use this line to delete multiple white spaces in my data. What's the alternative way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

凉薄对峙 2024-12-17 10:35:40

这很可能就是原因。使用 u (UTF-8)修饰符,否则正则表达式可能只匹配某些 Unicode 字符的一部分。

另外,我注意到您提到了 ereg_* 但正在使用 preg_*。这很好,总是更喜欢使用 preg_* 而不是旧的、缓慢的和已弃用的 ereg_* 函数。

That could very well be the reason. Use the u (UTF-8) modifier, otherwise the regular expression is likely to match only parts of some Unicode characters.

Also, I noticed you mentioned ereg_* but are using preg_*. That's good, always prefer using preg_* instead of the old, slow and deprecated ereg_* functions.

命比纸薄 2024-12-17 10:35:40

您必须在模式后面添加 u 修饰符,如下所示:

'/(\v|\s)+/u'

正如您在此处看到的:

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

You have to add the u modifier after your pattern like this:

'/(\v|\s)+/u'

as you can see here:

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

那小子欠揍 2024-12-17 10:35:40

您可能应该使用 mb_ereg_replace 而不是 ereg_replace。

You should probably use mb_ereg_replace instead of ereg_replace.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文