当针字符串包含不可见/零宽度字符时,strpos() 返回 false

发布于 2024-12-21 08:25:21 字数 322 浏览 1 评论 0原文

为什么回报不好?

<?php
$r = "<h3>Welcome</h3>";
if (strpos($r, "​Welcome") !== FALSE) {
    echo "Good";
}
?>

通过对创建此帖子时被破坏的违规 unicode 字符进行硬编码来重现:

$r = "<h3>Welcome</h3>";
if (strpos($r, "\u{200C}Welcome") !== FALSE) {
    echo "Good";
}

Why it is not returning good?

<?php
$r = "<h3>Welcome</h3>";
if (strpos($r, "​Welcome") !== FALSE) {
    echo "Good";
}
?>

Reproduce by hardcoding the offending unicode character which was destroyed when creating this post:

$r = "<h3>Welcome</h3>";
if (strpos($r, "\u{200C}Welcome") !== FALSE) {
    echo "Good";
}

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

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

发布评论

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

评论(3

嗼ふ静 2024-12-28 08:25:21

你看到那个小框了吗?即 UTF-8 中的 E2 80 8B,即零宽度空间。
这并不存在于您的源文本中。


在此处输入图像描述

Do you see the little box? That is E2 80 8B in UTF-8, the zero-width space.
And that's not present in your source text.


enter image description here

虫児飞 2024-12-28 08:25:21

奇怪的是,它对我有用(请参阅 codepad):

<?php
$r = "<h3>Welcome</h3>";
if (strpos($r, "Welcome") !== FALSE) {
    echo "Good";
}

但是,我重写了该字符串,因为在您的代码中它包含一个隐藏字符。 ;)

Strange, it works for me (see codepad):

<?php
$r = "<h3>Welcome</h3>";
if (strpos($r, "Welcome") !== FALSE) {
    echo "Good";
}

Good

However, I rewrote the string because in your code it contains a hidden character. ;)

狠疯拽 2024-12-28 08:25:21

你的代码应该可以工作 - 逻辑很好。

然而,那里有一个有趣的角色 - 我想你已经从某个地方复制/粘贴了这段代码?

当我将此页面上的代码复制到编辑器中时,它抱怨有一个字符无法在我的字符集中表示,并且 strpos($r, " Welcome") 变为 strpos ($r,“?欢迎”)

输入字符串不会发生这种情况,因此它们不会匹配。

Your code should work - the logic is fine.

However, there is a funny character in there somewhere - I presume you have copy/pasted this code from somewhere?

When I copy the code off this page into my editor, it complains that there is a character that cannot be represented in my character set, and strpos($r, "​Welcome") becomes strpos($r, "?Welcome").

This does not happen for the input string so they won't match.

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