在php中搜索字符串,搜索字段包含空格

时间:2017-06-23 07:09:52

标签: php whitespace

这是我的代码

<div style="display:inline-block; ">    
<?php $a = strtolower($criteria); if (strpos($a, 'fits models from: 11/2000') !== false) { 
     echo 'Fits models from 2000,'; } ?> </div>

我的白色空间有问题。 如果我只使用'拟合模型'或者我使用'11 / 2000',它会找到字符串,但不是两者结合使用。我需要他们合并,否则它是无用的。

编辑: 我做不到这样的事情:

<?php $a = strtolower($criteria); 
if (strpos($a, 'fits models from')  !== false)  
if (strpos($a, '11/2000') !== false) { 
    echo 'Fits models from 2000,'; } ?> </div> 

因为我想用它来分隔文本中的关键因素,即汽车模型,从其余部分输出该信息。 如果$ criteria表示'适合11/2000的模型,但只适合模型直到06/2002'那么它将输出'拟合模型从2000','拟合模型直到2000','适合模型从2002','适合模型直到2002' 。

1 个答案:

答案 0 :(得分:0)

识别未知角色:

  1. 找到字符串编码(在您的情况下可能是UTF-8)
  2. 使用字符
  3. 提取短子字符串
  4. 将其拆分为字节并以十六进制显示
  5. 查看编码表,找到用于编码它的字节的字符
  6. 示例字符串:"a:\xe2\x80\x85b",看起来像a: b但空格较小。

    $str = "a:\xe2\x80\x85b"; // I wrote \xe2\x80\x85 only to set $str and to show a working code,
                              // but here I don't know what are the values of these bytes  
    
    preg_match('~:(.*?)b~us', $str, $m); // shortest substring between : and b
    
    echo implode(' ', array_map(function ($b) { return dechex(ord($b)); }, str_split($m[1])));
    
    // e2 80 85
    

    我获得3个字节e2 80 85,然后我搜索它是否代表unicode table中的一个或多个字符,我发现:U+2005   e2 80 85 FOUR-PER-EM SPACE

    结论:未知字符是FOUR-PER-EM SPACE(unicode点:U + 2005),需要以UTF-8编码3个字节e2 80 85。所以我可以用双引号字符串写"\xe2\x80\x85"