我正在使用此功能来清理字符串以进行弹性搜索:
function cleanString($string){
$string = mb_convert_encoding($string, "UTF-8");
$string = str_ireplace(array('<', '>'), array(' <', '> '), $string);
$string = strip_tags($string);
$string = filter_var($string, FILTER_SANITIZE_STRING);
$string = str_ireplace(array("\t", "\n", "\r", " "," ­",":"), ' ', $string);
$string = str_ireplace(array("­","«","»","£"), '', $string);
return trim($string, ",;.:-_*+~#'\"´`!§$%&/()=?«»")
}
它可以做各种各样的事情,但是我面临的问题与最后的trim
函数有关。它应该修剪掉空格和特殊字符,并且工作良好,直到最近,我添加了两个特殊字符来修剪字符串:«
和»
。这引起了另一个特殊字符的问题:
当我将单词België
传递到函数中时,ë
被破坏,elastic抛出错误。
«
和»
并保留ë
?答案 0 :(得分:4)
public class Customer {
public String id;
public CI ci;
public CustData custData;
...
}
不支持编码,仅查看各个字节。如果您告诉它修剪trim
,并且它是以UTF-8编码的,它将查找字节'«»'
(其中C2 AB C2 BB
是多余的,因此C2
是实际的搜索字词)。 UTF-8中的“ë”为AB BB C2
,因此将其中的一半删除并破坏了字符。
您需要使用编码感知功能来安全删除多字节字符,例如:
C3 AB