转换原因
接口返回的信息如果包含
rgb(255,255,255)
等颜色设置的话,安卓一般不能渲染这样的颜色设置,其实按常理说后台一般处理数据,样式等东西是前台自己渲染的。如果把RGB
颜色换成#FFFFFF
十六进制的,一般会适用于大部分安卓机。
代码处理
private function changeColor($content){
$regexp = "/rgb\([0-9]{0,3}\,\s*[0-9]{0,3}\,\s*[0-9]{0,3}\)/";
preg_match_all($regexp, $content, $rgbs);
if($rgbs[0]){
foreach($rgbs[0] as $rgb){
$color16 = $this->RGBToHex($rgb);
$content= str_replace($rgb, $color16, $content);
}
}
$data = $content;
return $data;
}
/**
* RGB转 十六进制
* @param $rgb RGB颜色的字符串 如:rgb(255,255,255);
* @return string 十六进制颜色值 如:#FFFFFF
*/
private function RGBToHex($rgb){
$regexp = "/^rgb\(([0-9]{0,3})\,\s*([0-9]{0,3})\,\s*([0-9]{0,3})\)/";
$re = preg_match($regexp, $rgb, $match);
$re = array_shift($match);
$hexColor = "#";
$hex = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
for ($i = 0; $i < 3; $i++) {
$r = null;
$c = $match[$i];
$hexAr = array();
while ($c > 16) {
$r = $c % 16;
$c = ($c / 16) >> 0;
array_push($hexAr, $hex[$r]);
}
array_push($hexAr, $hex[$c]);
$ret = array_reverse($hexAr);
$item = implode('', $ret);
$item = str_pad($item, 2, '0', STR_PAD_LEFT);
$hexColor .= $item;
}
return $hexColor;
}