使用preg_match_all和度数符号时遇到问题

时间:2011-08-26 23:38:20

标签: php regex

我在包含度数符号的字符串上遇到preg_match_all时遇到问题。代码示例如下。

//Sample data
$x = "<array_0>
        <id>text-21650</id>
        <text>Lat/Long 38° 57' 34 N,  106° 21' 38 W</text>
      </array_0>";

$reels = '/<(\w+)\s*([^\/>]*)\s*(?:\/>|>(.*)<\/\s*\\1\s*>)/s';

preg_match_all($reels, $x, $elements);

foreach ($elements[1] as $ie => $xx) {
  $name = $elements[1][$ie];
  $cdend = strpos($elements[3][$ie], "<");
  if ($cdend > 0) {
    $xmlary[$name] = substr($elements[3][$ie], 0, $cdend - 1);
  }

  if (preg_match($reels, $elements[3][$ie]))
    $xmlary[$name] = processEl($elements[3][$ie]);
  else if ($elements[3][$ie] !== null) {
    $xmlary[$name] = $elements[3][$ie];
  }
}

由于某些原因,它与度数符号无法正常工作。如果我把它拿出来就有效。我真的想找到一种方法,他们可以留在那里而不改变它们。我也想知道是否还有其他可能导致问题的扩展角色。

非常感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:3)

查看this previous answer on StackOverflow

基本上你必须切换到Unicode匹配。

  

使用mb_ereg_match来支持UTF-8字符。文档:   http://php.net/manual/en/book.mbstring.php

     

像这样初始化mb *:

     

mb_regex_encoding( 'UTF-8'); mb_internal_encoding( 'UTF-8');

答案 1 :(得分:3)

我遇到了同样的问题,this other post from stackoverflow帮助了我。基本上,要查找度数符号,您可以使用\ x,即。

  

preg_match_all(&#34; / \ x {00B0} /&#34;,$ x,$ elements);