为什么我的 search() 无法找到特殊字符?

Why is my search() unable to find special characters?

我认为这是一个字符编码问题。只要字符串包含某些特殊字符(例如 ()* 括号、星号和数字),我的 javascript 搜索就无法识别该字符串。

javascript 相当简单。我在字符串 (str) 中搜索值 (val):

n = str.search(val);

我搜索的字符串已使用 PHP...

写入 txt 文件
$scomment = $_POST['order'];
$data = stripslashes("$scomment\n");
$fh = fopen("comments.txt", "a");
fwrite($fh, $data);
fclose($fh);

...然后用 PHP...

检索
$search = $_GET["name"];
$comments = file_get_contents('comments.txt');
$array = explode("~",$comments);
foreach($array as $item){if(strstr($item, $search)){
echo $item;  } }

...并使用 AJAX...

放入我的 HTML
xmlhttp.open("GET","focus.php?name="+str,true);
xmlhttp.send();

我的 HTML 编码为 UTF-8。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

问题是当我搜索()字符串时,无法识别特殊字符。

我没有真正看到对 PHP 创建的文本进行编码的选项,所以我假设它也是 UTF-8。这个假设不正确吗?

如果是编码问题,如何更改PHP写入的txt文件的编码?如果是上面的代码引起的,请问是哪里出了问题?

search() 函数采用正则表达式。如果给出一个字符串,它被转换成一个。正因为如此,任何特殊字符都有特殊的含义,它不会像预期的那样工作。您需要转义特殊字符。

Syntax

str.search(regexp)

Parameters

regexp

A regular expression object. If a non-RegExp object obj is passed, it is implicitly converted to a RegExp by using new RegExp(obj).

如果您想搜索文本,请改用 str.indexOf(),除非您需要正则表达式。如果是这样,请参阅此处了解如何转义字符串:Is there a RegExp.escape function in Javascript?

在您的代码中包含此函数:

function isValid(str){
 return !/[~`!#$%\^&*+=\-\[\]\';,/{}|\":<>\?]/g.test(str);
}

希望对您有所帮助