问题标签 [multibyte-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
180 浏览

php - REGEXP 将任何 3 个字符或更少的单词转换为 wordVVV

我正在尝试将任何出现的 3 个字符或更少字符的单词转换为带有字符串 VVV 的同一个单词。
示例:for -> forVVV
我不使用拉丁字符 (UTF8),因此使用 MB。
我所拥有的是:

我错过了什么?

这是一个案例研究,看它什么都没有:

0 投票
4 回答
25402 浏览

php - PHP Multi Byte str_replace?

I'm trying to do accented character replacement in PHP but get funky results, my guess being because i'm using a UTF-8 string and str_replace can't properly handle multi-byte strings..

Results I get:

Expected Result:

Edit: I've got my internal character handler set to UTF-8 (according to mb_internal_encoding()), also the value of $str is UTF-8, so from what I can tell, all the strings involved are UTF-8. Does str_replace() detect char sets and use them properly?

0 投票
8 回答
3916 浏览

php - 在 PHP 中使用 UTF-8 字符集 - 是否需要 mb 函数?

在过去的几天里,我一直在努力将我的 PHP 代码库从 latin1 转换为 UTF-8。我已经阅读了两个主要的解决方案,要么用内置的多字节函数替换单字节函数,要么在 php.ini 文件中设置 mbstring.func_overload 值。

但是后来我在堆栈溢出时遇到了这个线程,thomasrutter 的帖子似乎表明多字节函数实际上并不是 UTF-8 所必需的,只要脚本和字符串文字以 UTF-8 编码即可。

我还没有找到任何其他证据这是否属实,如果事实证明我不需要将我的代码转换为 mb_functions 那么这将是一个真正的节省时间!任何人都可以对此有所了解吗?

0 投票
1 回答
3157 浏览

php - 可以从 htaccess 文件设置 PHP 值 mbstring.internal_encoding 吗?

以下用于启用多字节数据的函数重载的 PHP 命令在从 .htaccess 文件中设置时似乎不起作用:

php_value mbstring.func_overload 7

我读到 PHP 5.2.x 版本中存在一个错误,导致它无法正常工作,但是我使用的是 PHP 5.3.0,但它仍然无法正常工作?

但是,如果此设置不适用于 htaccess,是否有任何其他选项可用于更改它?我知道它可以在 php.ini 文件中设置,但如果我这样做可能会对我服务器上托管的非 mb 代码产生不利影响!

0 投票
2 回答
3412 浏览

php - strpos 在 PHP 中搜索 unicode(并处理内联 UTF-8)

我在处理可能是也可能不是 UTF-8 的另一个字符串(干草堆)中简单搜索两个字符的 unicode 字符串(针)时遇到问题

部分问题是我不知道如何指定用于 in 的代码strpos,并且我不知道 PHP 是否必须在对代码的任何特殊支持的情况下进行编译,或者我是否必须使用mb_strpos我正在尝试的避免,因为它也可能不可用。

IE。例如针是 U+56DE U+590D(没有空格)

使用 preg_match 可能是preg_match("@\x{56DE}\x{590D}@",$haystack) 但实际上需要@u的可能不可用,Compilation failed: character value in \x{...} sequence is too large无论如何我得到了。

我不想使用 preg_match ,因为它可能比 strpos 慢得多(还有其他序列需要搜索)。

我可以转换U+56DE U+590D成它的单字节序列(可能是 5-6 个字符),然后通过 strpos 搜索它吗?如果是这样,我不知道如何将其转换为字节。

无论如何,您如何在 PHP 中指定 unicode 内联?我的意思是在PRCE之外?

$blah="\u56DE\u590D"; 不工作?

感谢您的任何想法!

0 投票
4 回答
11006 浏览

winapi - Windows API:ANSI 和宽字符字符串——是 UTF8 还是 ASCII?UTF-16 还是 UCS-2 LE?

我对编码不是很专业,但这是我认为我知道的(尽管它可能是错误的):

  1. ASCII 是一种 7 位、固定长度的编码,您可以在 ASCII 图表中找到字符。
  2. UTF8 是一种 8 位的可变长度编码。所有字符都可以用 UTF8 编写。
  3. UCS-2 LE/BE 是固定长度的 16 位编码,支持最常见的字符。
  4. UTF-16 是一种 16 位的可变长度编码。所有字符都可以用 UTF16 书写。

以上这些都是正确的吗?

现在,对于问题:

  1. Windows“A”函数(如SetWindowTextA)是否接收 ASCII 字符串?还是“多字节字符串”(下面有更多问题)?
  2. Windows "W" 函数接受 UTF-16 字符串还是 UCS-2 字符串?我以为他们接受 UCS-2,但名字让我感到困惑。
  3. WideCharToMultiByte中,Microsoft 使用“宽字符串”一词来表示 UTF-16。在这种情况下,什么被认为是“多字节字符串”?UTF-8?
  4. LPWSTR“宽字符串”吗?我会说它是,但是,那不是意味着它是 UTF-16 吗?这是否意味着它可以用来显示,比如说,4 字节字符?如果不是,那么...显示 4 字节字符是不可能的吗?(Windows 似乎没有这些 API。)
  5. WideCharToMultiByte的超集的功能是wcstombs, 并且它们都适用于相同类型的字符串吗?或者说,一个在 UTF-16 上工作,而另一个在 UCS-2 上工作?
  6. 文件路径是 UTF-16 还是 UCS-2?我知道 Windows 将其视为 Microsoft 文档中的“不透明字符数组”,但根据 C 函数的标准,例如fwprintf,是否有任何标准化编码?
  7. 什么是“ANSI”编码?这甚至是一个正确的术语吗?它与 ASCII 有什么关系?
  8. (我还有更多问题,但这已经足够了......我还是忘记了其中一些......)

这些问题很多,因此任何有关所有这些连接方式的解释链接(除了阅读 Unicode 标准,这对 Windows API 没有帮助)也将不胜感激。

谢谢!

0 投票
3 回答
1361 浏览

php - 用于从多字节字符串中去除重复字符的 PHP 方法?

啊。有谁知道如何创建一个相当于 PHP count_chars($string, 3) 命令的多字节字符的函数?

这样它将返回每个唯一字符的仅一个实例的列表。如果那是英语,我们有

“aaabggxxyxzxxggggghq xcccxxxzxxyx”

它将返回“abgh qxyz”(注意空格被计算在内)。

(在这种情况下,顺序并不重要,可以是任何东西)。

如果日文汉字(不确定浏览器是否都支持):

汉汉汉字私字私字私汉字私汉字</p>

它只会返回使用的 3 个汉字:

汉字私</p>

它需要处理任何 UTF-8 编码的字符串。

0 投票
2 回答
3033 浏览

php - 将 mb_detect_encoding() 与 PHP 一起使用时出现字符编码 UTF8 问题

我正在阅读 RSS 提要http://beersandbeans.com/feed/

提要说它是 UTF8 格式,我正在使用 simplepie rss 导入内容当我抓取内容并将其存储在其中时,$content我执行以下操作:

这会产生:

为什么输出 Â?

0 投票
2 回答
343 浏览

php - 使用 PHP 检测、保存、输出 UTF8

我和许多其他 PHP 开发人员一样遇到了字符编码问题,这个问题将概述我为确保我的数据以 UTF8 格式保存和输出所执行的步骤。我想要任何关于我应该考虑和/或改变我目前的想法的建议。

我有一个 mysql 数据库DEFAULT CHARACTER UTF-8,我的表有排序规则utf8_general_ci

我正在使用 php 脚本从 RSS 提要中读取数据,然后将该数据保存到数据库中。在我保存该数据之前,我通过执行以下操作检查该数据是否为 ​​UTF-8:

将此数据输出到网页时,我在 php 中设置标题

header("Content-type: text/html; charset=utf-8");

我还将 Content-Type 元标记设置为 utf-8

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

到目前为止,一切都按预期工作,我没有输出有趣的字符,一切进展顺利,但是在处理这些数据时我是否应该更改/考虑其他任何事情?

我现在遇到的问题是将此数据输出到 txt 文件 (csv) 我正在使用 fwrite() 已成功创建文件,但我将这个文件传递给第 3 方说该文件不是 UTF-8。我不确定数据是否以 UTF-8 输出,我该如何检查?当通过 SSH 登录到远程服务器Itâs a时,当我得到 vim 时得到的文件Itâ~@~Ys时,我得到的文件是我得到的文件时得到的文件It<E2><80><99>s我在这里想念什么?

提前致谢!

0 投票
2 回答
141 浏览

php - 网站转换帮助-UTF-8,涵盖所有基础...函数、元数据和sql utf-8

你们都做了如此出色的工作,回答了我之前认为的一个问题——我会在我深入转换之前问这个问题,结果却发现我做错了什么。我为自己制作的网站只有 3 页。它有表格,sqli db。有人告诉我使用 UTF-8(我部分使用了,但没有完全使用)哈哈。好的,听起来很酷。现在我想将其修复为 100% UTF-8 感知,我已经在 PHP、JS 和 HTML 中编写了大约 1,900 行代码,而不使用多字节函数。所以......这是我的问题......在我的转换中我已经做到了......(来自不同地方的代码片段......)

PHP

HTML

ETC

SQL

(来自 cpanel 界面)MySQL 连接整理”:utf8_general_ci

SQL DB(仍处于 pre utf-8 模式)

用户名 varchar(50) latin1_general_cs

公司名称 varchar(50) latin1_swedish_ci

fname varchar(25) latin1_swedish_ci

我在表格中没有有价值的数据。我会将它们更改为以下之一(但我不确定是哪一个)...

utf8_general_ci 或 utf8_unicode_ci

虽然我想让该网站可供外国人使用,但这不是一个高优先级,但因为我正在使用 UTF-8 风格,它可能已经适用于外语。

我的问题是...

1)我设置了我的时区,我没有在php中设置我的语言环境,因为我从来没有这样做过。我需要这样做吗?我如何为我的多伦多/加拿大位置做到这一点?

2)通过元标记设置每个页面是否足以使整个页面变成UTF-8

3)使用元标记是否意味着我的所有表单字段都已作为 UTF-8 数据输入?如果没有,我该如何改变它们。

4)我的数据库使用哪一个?utf8_general_ci 或 utf8_unicode_ci

5)我需要某些东西区分大小写。我只看到 ci 为 utf8。这是因为“戴夫”与“戴夫”不同,所以使用多字节比较自动比较大小写...??!?!?!

6)我的数据库目前有 50 个字符用于 ASCII 内容的存储 - 我假设通过在数据库中切换到 utf-8 ,对于像我这样的英国人来说,50 个存储就可以了 - 但是如果一些外国人出现并输入了一堆奇怪的符号我需要将存储空间增加 x4 以容纳 unicode 的所有额外字节?我不介意用掉更多的存储空间,但我很好奇分配它的正确方法是什么。既然它是一个 VARCHAR(50) ,它真的很重要吗?如果名称是“Dave”,它将是 4 个字符。如果是外国名字,符号中的“Dave”可能是12个字符!哈哈。因此,如果我将 100 分配给应该做的用户名字段,因为不太可能所有字符都是 4 个字节。或者,只需将其设置为 x4,就像我对英语的要求一样,并将它们全部设为 VARCHARS 以节省空间。当他们在表单上输入数据时,我将使用 MB_LENGTH 函数(我忘记了确切的函数),所以我仍然能够控制输入多少字符。

7)如何测试我的 unicode 网站?除了漂亮的英语,我从未使用过其他任何东西:) 大声笑。如何切换浏览器?假装我来自其他地方并输入一堆代码,看看我的函数在我重写它们以使用 mb_(多字节)函数后是否工作。或者,没有什么可以切换的......我只需输入 ALT 245 或其他东西,我就会得到符号?!?!?我不知道如何输入外国测试字符!因为我没有对我的网站进行足够的测试,所以让所有外国客户都无法输入密码,这将是很糟糕的 :)

8)我知道使用某些函数 ctype、mb_ 来处理 unicode 比较、字符串等。对我来说有什么惊喜吗?不能正常工作的事情?

是的……我很啰嗦!:) 我使用 Dreamweaver CS3,但这没关系。我的实际文件中没有嵌入 UTF-8 字符。

等待你的智慧...