Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Strpos与希伯来文字符串不匹配_Php_Hebrew - Fatal编程技术网

Php Strpos与希伯来文字符串不匹配

Php Strpos与希伯来文字符串不匹配,php,hebrew,Php,Hebrew,我正在使用strpos查找希伯来语字符串是否存在。我试了mb\u strpos,试了!strpos,甚至是类似的文本(),但都不起作用 有什么想法吗 守则: $data1 = file_get_contents('hebrewtext.txt'); $data2 = "אבגדהוזחטיכל"; if(strpos($data1, $data2) === FALSE) { # Hebrew string does not exists } else { # Hebrew string

我正在使用
strpos
查找希伯来语字符串是否存在。我试了
mb\u strpos
,试了
!strpos
,甚至是类似的文本(),但都不起作用

有什么想法吗

守则:

$data1 = file_get_contents('hebrewtext.txt');
$data2 = "אבגדהוזחטיכל";

if(strpos($data1, $data2) === FALSE) {
 # Hebrew string does not exists
}

else {
 # Hebrew string exists
}

谢谢。

在php中,字符串函数仅支持。因此,您需要使用另一个名为mb_strpos(用于多字节strpos)的函数。此外,由于必须处理非ASCII字符,我建议将代码中使用的任何字符串函数替换为多字节字符串函数中的等效函数。(这是标准的)

使用mb_strpos()并使用mb_internal_encoding()将编码设置为UTF-8。

首先,至少您必须用
UTF-8
编写PHP代码。除了
ASCII
UTF-8
之外,PHP不完全支持

如果您也在
UTF-8
中编写了
hebrewtext.txt
,只需使用
strpos
。尽管返回的偏移量是基于字节的而不是基于字符的,但如果您将其与
FALSE
进行比较,则不会出现问题

<?php
$data1 = file_get_contents('hebrewtext.txt'); // This file is written in UTF-8
$data2 = "אבגדהוזחטיכל"; // This code is written in UTF-8
var_dump(strpos($data1, $data2) !== FALSE)); // Contains? -> It'll work

是否“什么都没有发生”表示代码没有执行,或者字符串没有找到?@kittykittybangbang字符串没有找到您是否确保您的PHP文件和文本文件具有相同的编码?(不是一个是UTF-8,另一个是ISO什么的。)@Siguza,问题主要是编码)问题在哪里,对我来说有效。它正在按预期工作(但是,
strpos
工作)。@Siguza将link替换为不包含扩展ASCII代码的链接。我的意思是,您声称PHP字符串函数只支持ASCII是错误的。据我所知,它们是在字节上运行的。@Siguza没有这样的文档记录。他们只是说。此外,如果它们确实支持其他编码,那么为什么所有的mb_*函数都存在并被记录为多字节安全函数?@Siguza进一步证明php的字符串函数不兼容,这也解释了示例工作的原因。你可能启用了他没有的功能,你能举个例子吗?”因为我试过了,但也许你的想法与UTF-8不同,你不必使用
mb\u strpos
,只要将它与
FALSE
进行比较即可。UTF-8是前缀代码。请检查hebrewtext.txt您的脚本.php的编码。CP1255?您应该将它们转换为UTF-8。