PHP修剪特殊字符会破坏其他特殊字符

时间:2019-07-08 09:35:13

标签: php string character-encoding special-characters

我正在使用此功能来清理字符串以进行弹性搜索:

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", "&nbsp;"," &shy;",":"), ' ', $string);
    $string = str_ireplace(array("&shy;","&laquo;","&raquo;","&pound;"), '', $string);
    return trim($string, ",;.:-_*+~#'\"´`!§$%&/()=?«»")
}

它可以做各种各样的事情,但是我面临的问题与最后的trim函数有关。它应该修剪掉空格和特殊字符,并且工作良好,直到最近,我添加了两个特殊字符来修剪字符串:«»。这引起了另一个特殊字符的问题:

当我将单词België传递到函数中时,ë被破坏,elastic抛出错误。

  • 为什么修剪会破坏一个完全不同的角色?
  • 我该如何解决 这样,以便我解析出«»并保留ë

1 个答案:

答案 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