是否需要 mb_* 来替换多字节字符串中的单字节字符?

发布于 2025-01-03 00:00:08 字数 335 浏览 0 评论 0原文

假设我有一个如下所示的 UTF-8 文本:

âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ

我想将
替换为
。我需要使用 mb_str_replace 还是可以使用 str_replace

考虑< b r / >都是单字节char吗?

Let's say I have an UTF-8 text like this:

âàêíóôõ <br> âàêíóôõ <br> âàêíóôõ

I want to replace <br> with <br />. Do I need to use mb_str_replace or I can use str_replace ?

Consindering < b r / > are all single byte char?

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

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

发布评论

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

评论(2

酒废 2025-01-10 00:00:08

由于 str_replace 是二进制安全的并且 UTF-8 是双射编码,因此您可以使用str_replace,即使搜索字符串或替换包含多字节字符,只要所有三个参数都编码为UTF-8即可。

这就是为什么首先没有 mb_str_replace 函数的原因。

如果您的编码不是双射的 - 即同一字符串有多种表示形式,例如 UTF-7 中的 <,可以表示为 '+ADw-''<',您应该将所有字符串转换为相同(双射)编码,应用 str_replace,然后将字符串转换为目标编码。

Since str_replace is binary-safe and UTF-8 is a bijective encoding, you can use str_replace, even if search string or replacement contains multi-byte characters, as long as all three parameters are encoded as UTF-8.

That's why there isn't an mb_str_replace function in the first place.

If your encoding is not bijective - i.e. there are multiple representations of the same string, for example < in UTF-7, which can be expressed both as '+ADw-' and '<', you should convert all strings to the same (bijective) encoding, apply str_replace, and then convert the strings to the target encoding.

泪眸﹌ 2025-01-10 00:00:08

在 PHP 中安全操作 UTF-8 字符串的参考 (存档)。没有硬性规定。一些本机 PHP 字符串函数可以在 utf-8 上安全运行,有些可以小心,有些则不能。

没有 mb_str_replace()。请注意“UTF-8 安全功能”部分:只要所有三个参数都是有效的 UTF-8 字符串,explode()str_replace() 就是安全的。

Reference for manipulating UTF-8 strings safely in PHP (archive). There is no hard-and-fast rule. Some native PHP string functions functions can operate safely on utf-8, some can with care, and some cannot.

There is no mb_str_replace(). Notice the section "UTF-8 Safe Functionality": explode() and str_replace() are safe as long as all three arguments to it are valid UTF-8 strings.

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