2015-11-28 3 views
-2

У меня есть строка html iframe, где включена ширина и значение. Я хочу заменить значение ширины на regex в php. Например, я получаю значение динамическиphp regex, чтобы изменить значение атрибута html

<iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>

Я хочу, чтобы изменить значение ширины регулярным выражением. Вы можете мне помочь.

+1

изменить ширину используя PHP? используют шаблон? (я не дубликатор) –

+0

@HalayemAnis не проблема, мужчина. Я понимаю. Спасибо за ваш комментарий. Тем не менее, все еще пытаюсь исправить мою проблему. – StreetCoder

+0

Вы должны найти другой способ. Посмотрите здесь: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – danjah

ответ

1

Избегайте использование регулярных выражений в XML/HTML документов, есть производительные библиотеки, чтобы сделать это, если есть очень очень очень хорошая причина для этого

Попробуйте этот код, чтобы достичь своей работы

<?php 
    $html  = '<iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>'; 
    $doc  = new DOMDocument(); 
    $doc->loadHTML($html); 
    $elements = $doc->getElementsByTagName('iframe'); 

    foreach($elements as $el) { 
     $el->setAttribute('width', '1024'); 
    } 
    print $doc->saveHTML(); 

ВЫВОД

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><iframe width="1024" height="315" src="" frameborder="0" allowfullscreen></iframe></body></html>  
+0

far as i может сказать, что он не хочет! DOCTYPE html public ~~ stuff добавлен, ему просто нужен iframe code.try: print $ doc-> saveHTML ($ doc-> getElementsByTagName ('iframe') -> item (0)); – hanshenrik

+1

Вы также можете использовать '$ doc-> loadHTML ($ html, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);' чтобы предотвратить автоматическое добавление тегов doctype и html, head. –

+0

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

1

звучит как очень плохо идея, но здесь идет ... что-то вроде

<?php 
header('content-type:text/plain;charset=utf8'); 
$str=base64_decode('PGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSIiIGZyYW1lYm9yZGVyPSIwIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+'); 
$ret=preg_replace('/(\<iframe.*?width\=)\"(.*?)\"/','${1}"999"',$str); 
var_dump($str,$ret); 

изменит ширину до 999 ... но вы действительно должны использовать правильный HTML-парсер вместо этого, как DOMDocument.

[email protected]::loadHTML($str); 
$domd->getElementsByTagName('iframe')->item(0)->setAttribute('width',999); 
echo $domd->saveHTML($domd->getElementsByTagName('iframe')->item(0)); 

также изменить ширину до 999, и является гораздо более надежным (например, регулярное выражение сломается, если есть пробелы или символы новой строки между шириной и =, хотя он все равно будет законным HTML .. Вздох)