2015-05-01 136 views
1

我认为这是一个字符编码问题。我的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文件的编码?如果是由上面的代码引起的,问题在哪里?

+0

什么是$ scomment价值?实际上正在写入文本文件的是什么? – jeff

+0

字符串。句子。有些包含像括号这样的特殊字符,而这些是不被识别的。 – user3283304

+0

这些是正常字符,应该可以搜索。在你的代码中还有其他的事情正在阻止你想要的结果。 – jeff

回答

4

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

语法

海峡。 search(正则表达式)

参数

的regexp

的正则表达式对象。如果传递非RegExp对象obj,则通过使用新的RegExp(obj)将其隐式转换为RegExp。

如果要搜索文本,请改用str.indexOf(),除非需要一个正则表达式。如果是这样,看到这里就如何逃脱的字符串:Is there a RegExp.escape function in Javascript?

+0

当你说我“需要转义特殊字符”这是否意味着找不到这些字符的解决方案?我不能让他们在我的搜索? – user3283304

+0

查看更新的答案。 –

0

在代码中包括这样的功能:

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

希望它可以帮助