gpt4 book ai didi

PHP 多字节字符串函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:11 24 4
gpt4 key购买 nike

今天我遇到了 php 函数 strpos() 的问题,因为即使正确的结果显然是 0,它也返回 FALSE。这是因为一个参数是用 UTF-8 编码的,但是other(origin 是一个 HTTP GET 参数)显然不是。

现在我注意到使用 mb_strpos 函数解决了我的问题。

我现在的问题是:通常使用 PHP 多字节字符串函数来避免将来出现这些问题是否明智?我是否应该完全避免使用传统的 strposstrlenereg 等函数?

注意:我不想在 php.ini 中将 mbstring.func_overload 设置为全局,因为这会导致使用 PEAR 库时出现其他问题。我正在使用 PHP4。

最佳答案

这取决于您使用的字符编码。在单字节字符编码或 UTF-8(其中一个字符内的单个字节永远不会被误认为是另一个字符)中,只要您要搜索的字符串和您用于搜索的字符串在同一个encoding 然后你可以继续使用常规的字符串搜索功能。

如果您使用的是 UTF-8 以外的多字节编码,它不会阻止字符中的单个字节像其他字符一样出现,那么使用常规字符串搜索函数进行字符串搜索是不安全的。您可能会发现误报。这是因为 PHP 在 strpos 等函数中的字符串比较是按字节进行的,除了专门为防止此问题而设计的 UTF-8 之外,多字节编码会遇到这样的问题,即字符中的任何后续字节由多个字节可能匹配不同字符的一部分。

如果您中搜索的字符串与您要搜索的字符串的字符编码不同,则始终需要进行转换。否则您会发现,对于在其他编码中以不同方式表示的任何字符串,它总是会返回 false。您应该对输入进行此类转换:决定您的应用程序将使用的字符编码,并在应用程序内保持一致。每当您收到不同编码的输入时,请在输入的过程中进行转换。

关于PHP 多字节字符串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/661832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com