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

标签 php unicode utf-8 multibyte multibyte-functions

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

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

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

使用 preg_match 可能是 preg_match("@\x{56DE}\x{590D}@",$haystack) 但这实际上需要 @u ,它可能不可用,并且我得到一个 Compilation failed: character value in\x{...}equence is太大 无论如何。 p>

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

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

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

$blah="\u56DE\u590D"; 不起作用?

感谢您的任何想法!

最佳答案

首先,你的问题结构很糟糕。它在几个点上有几个问题。如果您使用更清晰的结构,您可能会得到更多答案:1)描述您想要完成的任务,2)限制/要求,3)您考虑的策略,4)您发现这种策略的困难/有没有更好的。

也就是说,我将从最后开始:

$blah="\u56DE\u590D"; doesn't work?

没有。该语言对 unicode 一无所知。在 PHP 中,字符串是字节数组。因此,如何在 PHP 脚本中表达 unicode 代码点取决于您要使用的编码。对于 UTF-8,它将是 "\xE5\x9B\x9E\xE5\xA4\x8D" ,对于 UTF-16 大端字节序将是 "\x56\xDE\x59\x0D" ,等等。

Can I convert U+56DE U+590D into its single byte sequence (possibly 5-6 characters) and then search for it via strpos? I can't figure out how to convert it to bytes if so.

对于第一部分,是的,即转换 U+56DE U+590D转换为字节,需要澄清。这些是 UTF-16 代码单元还是 Unicode 代码点?例如,𪛖怎么样?代表? U+D869 U+uDED6U+2A6D6 ?如果它们是 unicode 代码单元,那么将它们编码为 UTF-16 就很简单了。对于 UTF-16 大端字节序,它只是 "\x56\xDE\x59\x0D" 。否则,将它们编码为 UTF-32 仍然很简单,但在 UTF-16(或 UTF-8)中执行相同操作则需要更多工作。

对于第二部分,请继续阅读。

Part of the problem is I don't know how to specify the code for use in strpos, and I don't know if PHP has to be compiled with any special support for the code, or if I have to use mb_strpos which I am trying to avoid since it also might not be available.

你想做什么?为什么需要查找字符串中的位置? strpos将为您提供给定字符串的字节偏移量(同样以二进制形式解释)。你想剪断一根绳子吗? strpos (甚至 mb_strpos )在 Unicode 中意味着麻烦 - 一个字形可以由多个代码单元构成,因此您可能会冒着剪切部分字形的风险。除非你说出你想做什么,否则我无法给你更多建议。

关于php - strpos 在 PHP 中搜索 unicode(并处理内联 UTF-8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545807/

相关文章:

php - 计算剩余天数

html - 键入 Unicode 字符的编码或仅复制字符有什么区别?

c++ - 如何进行反向转换

ruby-on-rails - 表情符号未正确保存在 mongodb 中

php - Laravel 4 表单生成器自定义字段宏

php - 将 Magento 类别复制到父级

java - 从多种语言读取数据时如何避免垃圾字符?

perl - 用 perl 比较两个 Unicode 字符串

html - 我的 CSS 复选符号的 unicode 未在 IE7 中显示

c - 从指针到 char 返回正确的变音字符?