强制输出PHP for循环以保持在同一行

时间:2016-05-24 19:21:06

标签: php html w3c

我正在使用Joomla作为我网站的CMS,而且在我的网页上嵌入地图时,我的网站完全符合W3C标准时遇到了一些问题。我用来嵌入地图的模块使用这段代码嵌入地图。

<iframe height="<?php echo $module_height; ?>" 
         style="border:<?php echo $border; ?>; 
         width:<?php echo $module_width.$module_width_unit; ?>" 
         src="http://maps.google.com/maps?q=<?php 
for ($loop = 0; $loop < $keywords_number; $loop += 1) {
    echo $keywords[$loop];
    if($loop!=$keywords_number_1) {
        echo "+";
        }
}

?>&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=<?php

for ($loop = 0; $loop < $keywords_number; $loop += 1) {
    echo $keywords[$loop];
    if($loop!=$keywords_number_1) {
        echo ",+";
    }
}

?>&amp;<?php if($satellite) { ?>t=h&amp;<?php } ?>output=embed"></iframe>

不幸的是,这导致了这样的回报,

<iframe height="300" style="border:none; width:100%" src="http://maps.google.com/maps?q=STREET ADDRESS
CITY,+PROVINCE+POSTAL+CODE
&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=STREET ADDRESS
CITY,,+PROVINCE,+POSTAL,+CODE
&amp;output=embed"></iframe>

这些地图在网站上显示得非常好,但我收到了这个错误,

  

元素iframe上属性src的值不正确:找到Tab,新行或回车符。

我希望这个网站完全符合W3C标准,我认为我需要输出中的所有文本都在一行上。

有什么方法可以强制for循环在同一行上打印,或者将两个循环的输出连接成一个字符串以保持在同一行?

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用简单的空格替换放在src网址中的变量中的所有空白字符:

<iframe height="<?php echo $module_height; ?>" style="border:<?php echo $border; ?>; width:<?php echo $module_width.$module_width_unit; ?>" src="http://maps.google.com/maps?q=<?php                                                                                                                                                                                                        
for ($loop = 0; $loop < $keywords_number; $loop += 1) {
    echo $keywords[$loop];
    if($loop!=$keywords_number_1) {
        echo "+";
    }
}

?>&amp;ie=UTF8&amp;view=map&amp;f=q&amp;saddr=<?php

for ($loop = 0; $loop < $keywords_number; $loop += 1) {
    echo trim(preg_replace('/\s+/', ' ', $keywords[$loop]));
    if($loop!=$keywords_number_1) {
        echo ",+";
    }
}

?>&amp;<?php if($satellite) { ?>t=h&amp;<?php } ?>output=embed"></iframe>

答案 1 :(得分:1)

一些建议:

  • 停止写这个意大利面条代码
  • 考虑使用implode()来电替换循环。
  • 考虑将查询参数构建为数据结构,然后一次性转换为查询字符串。
  • 对参数字符串
  • 进行正确的URL编码

我可能会写这样的代码:

<?php
$google_map_base_url = 'http://maps.google.com/maps?';

// prepare parameters
$parameters = array();
$parameters['q'] = implode('+', $keywords);
$parameters['ie'] = 'UTF8';
$parameters['view'] = 'map';
$parameters['f'] = 'q';
$parameters['saddr'] = implode(',+', $keywords);
if($satellite) {
    $parameters['t'] = 'h';
}
$parameters['output'] = 'embed';

// build url-encoded query string
$query_string = http_build_query($parameters, '', '&amp;');

// build final url
$google_map_url = $google_map_base_url . $query_string;

// now output to browser
?>
<iframe height="<?php echo $module_height; ?>" style="border:<?php echo $border; ?>; width:<?php echo $module_width.$module_width_unit; ?>" src="<?php echo $google_map_url; ?>"></iframe>