Php 无法捕获字符üö;和ä;

Php 无法捕获字符üö;和ä;,php,html,Php,Html,当尝试将文件上载到我的web服务器时,我无法捕获字符ö、ä和ü $s = $_FILES['title']['name']; var_dump($s); // returns string(11) "hellö.PDF" var_dump(strpos($s, 'h') !== false); // returns bool(true) var_dump(strpos($s, 'e') !== false); // returns bool(true) var_dump(strpos($s,

当尝试将文件上载到我的web服务器时,我无法捕获字符ö、ä和ü

$s = $_FILES['title']['name'];
var_dump($s); // returns string(11) "hellö.PDF"
var_dump(strpos($s, 'h') !== false); // returns bool(true)
var_dump(strpos($s, 'e') !== false); // returns bool(true)
var_dump(strpos($s, 'l') !== false); // returns bool(true)
var_dump(strpos($s, 'ö') !== false); // returns bool(false)
我的页面标题包括

这里有什么问题

编辑:


偶数
var_dump(mb_strpos(utf8_encode($s),'ö')!==false)
返回
false

如果您的文本编辑器正在创建Unicode utf-8文件,这可能会起作用。 不确定默认情况下文件名是否为utf-8

<?php
$s = "äöüÄÖÜ";
var_dump(mb_strpos($s, 'ö') !== false);
?>

如果您的文本编辑器正在创建Unicode utf-8文件,这可能会起作用。 不确定默认情况下文件名是否为utf-8

<?php
$s = "äöüÄÖÜ";
var_dump(mb_strpos($s, 'ö') !== false);
?>

您可以用UTF-8包装字符串和字符

$r = utf8_encode("hellö");
echo strpos($r, utf8_encode('ö')); // 4
要查找UMLAUT,最好使用正则表达式:

你的用法是:

if (hasUmlauts($_FILES['title']['name'])) {
    // If true
} else {
    // If false
}

可以用UTF-8包装字符串和字符

$r = utf8_encode("hellö");
echo strpos($r, utf8_encode('ö')); // 4
要查找UMLAUT,最好使用正则表达式:

你的用法是:

if (hasUmlauts($_FILES['title']['name'])) {
    // If true
} else {
    // If false
}


您的PHP文件是否也保存在utf-8中?尽管在整个应用程序中也需要正确设置字符集。但一般来说,在处理多字节字符串时应该使用
mb.*
函数,请参阅@Qirel我也尝试过使用
mb.\u strpos
,但仍然得到相同的结果。@BenHillier是,我的PHP文件保存在UTF8中。您的PHP文件也保存在utf-8中吗?尽管在整个应用程序中也需要正确设置字符集。但一般来说,在处理多字节字符串时应该使用
mb.*
函数,请参见@Qirel我也尝试过使用
mb.\u strpos
,但我仍然得到相同的结果。@BenHillier是的,我的PHP文件保存在UTF8I中,但这使情况更糟。现在我的字符串看起来是这样的:
string(13)“helloÌ.PDF”
strpos()
仍然返回false。某些内容没有正确编码。我可以问一下为什么要查找某些字符的字符串位置偏移量吗?也许有更好的方法来处理你正在尝试的任何事情。当然,我只是想弄清楚字符ä、ö或ü是否在
$\u文件['title']['name']
中。如果您知道更好的解决方案,请随时提出建议。Pro-tip:任何建议使用
utf8\u encode()
函数的编码问题的答案几乎肯定是错误的。看看它到底是做什么的(是的,它的名字是非常错误的)。奥卡姆的剃须刀会暗示问题在于编码的某个地方。代码使用PHP5.6.8在我的机器上按预期运行。是您在
中使用UTF-8提交此文件上载的HTML页面吗?我是这样做的,但这会使情况更糟。现在我的字符串看起来是这样的:
string(13)“helloÌ.PDF”
strpos()
仍然返回false。某些内容没有正确编码。我可以问一下为什么要查找某些字符的字符串位置偏移量吗?也许有更好的方法来处理你正在尝试的任何事情。当然,我只是想弄清楚字符ä、ö或ü是否在
$\u文件['title']['name']
中。如果您知道更好的解决方案,请随时提出建议。Pro-tip:任何建议使用
utf8\u encode()
函数的编码问题的答案几乎肯定是错误的。看看它到底是做什么的(是的,它的名字是非常错误的)。奥卡姆的剃须刀会暗示问题在于编码的某个地方。代码使用PHP5.6.8在我的机器上按预期运行。您在
中使用UTF-8提交此文件上载的HTML页面?我的编辑器(升华文本)向我显示编码设置为UTF-8,但使用您的代码会导致相同的问题。因此我仍然得到
false
。尝试使用源字符集iso8859-1和目标字符集utf-8My编辑器(升华文本)显示编码设置为utf-8,但使用您的代码最终会出现相同的问题。因此我仍然得到
false
。请尝试使用源字符集iso8859-1和目标字符集utf-8