2016-05-24 2 views
1

Я использую Joomla как CMS для своего сайта, и у меня возникают некоторые проблемы, связанные с тем, что мой сайт полностью совместим с W3C при встраивании карты на мою страницу. Модуль, который я использую для встраивания карты, использует этот фрагмент кода для встраивания карты.Вывод строки PHP для цикла, чтобы оставаться в одной строке

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

На картах отображаются прекрасно на сайте, но я получаю эту ошибку,

Неверное значение атрибута src на элементе iframe: найдена вкладка, новая строка или возврат каретки.

Я хотел бы, чтобы этот сайт был полностью совместим с W3C, и я предполагаю, что мне нужен весь текст на выходе, который будет на одной строке.

Есть ли способ заставить строки for печатать на одной строке или объединить вывод двух циклов в строку, чтобы оставаться на одной строке?

Спасибо!

+0

Прежде всего, почему бы не построить всю строку параметров в PHP еще до начала выводить что-либо в HTML , Это, по крайней мере, очистит и поможет предотвратить ложные пробелы из-за характера кода спагетти, в котором в настоящий момент написан код. –

+1

Прекратите использование сложных циклов, чтобы выполнить работу 'join'. – CBroe

+0

Способ размещения тэгов 'php', нет очевидной причины, по которым вы должны получить эти новые строки. Вероятно, часть некоторых значений, которые вы выводите в этих циклах? Затем вы должны сначала «обрезать» лишние пробелы. (Нет необходимости возвращаться к циклу для этого, 'array_map' помогает.) – CBroe

ответ

1

Try, заменив все пробельные символы в Варс, которые вы положили в Src URL с помощью простого пространства:

<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

несколько предложений:

  • прекратить писать этот спагетти код
  • Рассмотрите возможность замены петель 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>