我在包含度数符号的字符串上遇到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];
}
}
由于某些原因,它与度数符号无法正常工作。如果我把它拿出来就有效。我真的想找到一种方法,他们可以留在那里而不改变它们。我也想知道是否还有其他可能导致问题的扩展角色。
非常感谢任何帮助。 感谢
答案 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);