2017-06-23 209 views
-3

這是我的代碼在PHP搜索字符串,搜索字段包含空格

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

,因爲我想用它來從文本,這是汽車模型獨立的關鍵因素,從休息和輸出信息。 如果$標準說「符合模型從11/2000,但只適合模型直到06/2002」則輸出「從2000年符合模型」,「適合的模型一直到2000年」,「2002年符合模型」,「模型擬合直到2002年「。

+0

'而不是兩個combined':你是什麼意思呢?你能寫出合併的字符串嗎?白色空間在哪裏出現問題? –

+0

我不能寫'適合11/2000的模型',那麼它什麼都沒有。我可以寫出'適合模型:'的句子的第一部分和第二部分'11/2000',這兩次都回應了我所追求的。白色空間「從適合車型:(空格)11/2000」 – easyquestions

+1

對我來說,它的逆轉... [查看](https://eval.in/821240) –

回答

0

身份未知字符:

  1. 找到字符串編碼(可能是UTF-8,你的情況)
  2. 提取短串以字符
  3. 把它分解成字節,並顯示它們十六進制
  4. 看編碼表,發現這是用字節(一個或多個)什麼字符用於編碼它

例如以字符串:"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個字節e28085,然後我搜索,如果它表示在unicode table一個或幾個字符,我發現:U+2005   e2 80 85 FOUR-PER-EM SPACE

結論:未知字符是FOUR-PER-EM SPACE(UNICODE點: U + 2005)並且需要3個字節e2 80 85以UTF-8編碼。所以我可以用雙引號字符串將它寫成"\xe2\x80\x85"