【问题标题】:Why is my search() unable to find special characters?为什么我的 search() 找不到特殊字符?
【发布时间】:2015-05-01 16:15:37
【问题描述】:

我认为这是一个字符编码问题。每当字符串包含某些特殊字符(例如 ()* 括号、星号和数字)时,我的 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文件的编码?如果是上面代码引起的,问题出在哪里?

【问题讨论】:

  • $scomment 值是多少?实际写入文本文件的内容是什么?
  • 文本字符串。句子。有些包含特殊字符,如括号,这些是无法识别的。
  • 这些是普通字符,应该是可搜索的。您的代码中发生的其他事情阻碍了预期的结果。

标签: javascript php string encoding utf-8


【解决方案1】:

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

语法

str.search(正则表达式)

参数

正则表达式

一个正则表达式对象。如果传递了非正则表达式对象 obj,则使用 new RegExp(obj) 将其隐式转换为正则表达式。

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

【讨论】:

  • 当你说我“需要转义特殊字符”时,这是否意味着没有找到这些字符的解决方案?我只是不能在我的搜索中找到它们?
【解决方案2】:

在你的代码中包含这个函数:

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多