Изменения, которые должны быть сделаны в манифесте Android:
android:configChanges="keyboardHidden|orientation"
Внесены дополнения в действие:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}
Хотя регулярные выражения могут быть полезны для большого количества задач, я считаю, что обычно они не работают при синтаксическом анализе HTML. ДОМ. Проблема с HTML заключается в том, что структура вашего документа настолько изменчива, что трудно точно (и под точным я имею в виду 100% успех без ложных срабатываний) извлечь тег.
Я рекомендую вам использовать Парсер DOM, такой как SimpleHTML
, и используйте его как таковой:
function get_first_image($html) {
require_once('SimpleHTML.class.php')
$post_html = str_get_html($html);
$first_img = $post_html->find('img', 0);
if($first_img !== null) {
return $first_img->src;
}
return null;
}
Некоторые могут подумать, что это излишество, но, в конце концов, это будет легче поддерживать, а также обеспечит большую расширяемость. Например, с помощью парсера DOM я также могу получить атрибут alt.
Можно разработать регулярное выражение для достижения той же цели, но оно будет ограничено таким образом, чтобы принудительно использовать атрибут alt
быть после src
или наоборот, и преодоление этого ограничения усложнит регулярное выражение.
Также учтите следующее. Чтобы правильно сопоставить тег
с использованием регулярных выражений и получить только атрибут src
(захваченный в группе 2), вам понадобится следующее регулярное выражение:
<\s*?img\s+[^>]*?\s*src\s*=\s*(["'])((\\?+.)*?)\1[^>]*?>
И затем снова , указанное выше может завершиться ошибкой, если:
i
не используется. src
не используются. src
, где-то в своем значении использует символ >
. Итак, опять же, просто не используйте регулярные выражения для анализа dom-документа.
РЕДАКТИРОВАТЬ: Если вам нужны все изображения:
function get_images($html){
require_once('SimpleHTML.class.php')
$post_dom = str_get_dom($html);
$img_tags = $post_dom->find('img');
$images = array();
foreach($img_tags as $image) {
$images[] = $image->src;
}
return $images;
}
Это работает для меня:
preg_match('@<img.+src="(.*)".*>@Uims', $html, $matches);
$src = $matches[1];
Используйте это, более эффективно:
preg_match_all('/<img [^>]*src=["|\']([^"|\']+)/i', $html, $matches);
foreach ($matches[1] as $key=>$value) {
echo $value."<br>";
}
Пример:
$html = '
<ul>
<li><a target="_new" href="http://www.manfromuranus.com">Man from Uranus</a></li>
<li><a target="_new" href="http://www.thevichygovernment.com/">The Vichy Government</a></li>
<li><a target="_new" href="http://www.cambridgepoetry.org/">Cambridge Poetry</a></li>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="value1.jpg" />
<li><a href="http://www.verot.net/pretty/">Electronaut Records</a></li>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="value2.jpg" />
<li><a target="_new" href="http://www.catseye-crew.com">Catseye Productions</a></li>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="value3.jpg" />
</ul>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="res/upload.jpg" />
<li><a target="_new" href="http://www.manfromuranus.com">Man from Uranus</a></li>
<li><a target="_new" href="http://www.thevichygovernment.com/">The Vichy Government</a></li>
<li><a target="_new" href="http://www.cambridgepoetry.org/">Cambridge Poetry</a></li>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="value4.jpg" />
<li><a href="http://www.verot.net/pretty/">Electronaut Records</a></li>
<img src="value5.jpg" />
<li><a target="_new" href="http://www.catseye-crew.com">Catseye Productions</a></li>
<img width="190" height="197" border="0" align="right" alt="upload.jpg" title="upload.jpg" class="noborder" src="value6.jpg" />
';
preg_match_all('/<img .*src=["|\']([^"|\']+)/i', $html, $matches);
foreach ($matches[1] as $key=>$value) {
echo $value."<br>";
}
Вывод:
value1.jpg
value2.jpg
value3.jpg
res/upload.jpg
value4.jpg
value5.jpg
value6.jpg
Я не знаю, ДОЛЖНЫ ли вы использовать регулярное выражение чтобы получить свои результаты. Если нет, вы можете попробовать simpleXML и XPath, которые будут намного более надежными для вашей цели:
Сначала импортируйте HTML в объект документа DOM. Если вы получаете ошибки, отключите их для этой части и обязательно включите их позже:
$dom = new DOMDocument();
$dom -> loadHTMLFile("filename.html");
Затем импортируйте DOM в объект simpleXML, например:
$xml = simplexml_import_dom($dom);
Теперь вы можете использовать несколько методов, чтобы получить все элементы изображения (и их атрибуты) в массив. Я предпочитаю XPath, потому что мне больше повезло с обходом с ним DOM:
$images = $xml -> xpath('//img/@src');
Эта переменная теперь может обрабатываться как массив URL-адресов ваших изображений:
foreach($images as $image) {
echo '<img src="$image" /><br />
';
}
Presto, все ваши изображения, ни один из жир.
Вот неаннотированная версия вышеизложенного:
$dom = new DOMDocument();
$dom -> loadHTMLFile("filename.html");
$xml = simplexml_import_dom($dom);
$images = $xml -> xpath('//img/@src');
foreach($images as $image) {
echo '<img src="$image" /><br />
';
}
я предполагаю, что все ваши src = have "вокруг URL
<img[^>]+src=\"([^\"]+)\"
другие ответы, размещенные здесь, делают другие предположения о вашем коде
Я согласен с Эндрю Муром. Использование DOM намного лучше. Коллекция изображений HTML DOM вернет вам ссылку на все объекты изображений.
Допустим, в вашем заголовке у вас есть
<script type="text/javascript">
function getFirstImageSource()
{
var img = document.images[0].src;
return img;
}
</script>
, а затем в вашем теле у вас есть
<script type="text/javascript">
alert(getFirstImageSource());
</script>
Это вернет 1-й источник изображения. Вы также можете просмотреть их в цикле по строкам, (в разделе заголовка)
function getAllImageSources()
{
var returnString = "";
for (var i = 0; i < document.images.length; i++)
{
returnString += document.images[i].src + "\n"
}
return returnString;
}
(в теле)
<script type="text/javascript">
alert(getAllImageSources());
</script>
. Если вы используете для этого JavaScript, помните, что вы не можете запускать свою функцию в цикле через коллекцию изображений в вашем заголовке. Другими словами, вы не можете сделать что-то подобное
<script type="text/javascript">
function getFirstImageSource()
{
var img = document.images[0].src;
return img;
}
window.onload = getFirstImageSource; //bad function
</script>
, потому что это не сработает. Изображения не загружаются при выполнении заголовка, поэтому вы получите нулевой результат.
Надеюсь, это поможет в какой-то мере. Если возможно, я бы использовал DOM. Вы'
Вы можете попробовать следующее:
preg_match_all("/<img\s+src=\"(.+)\"/i", $html, $matches);
foreach ($matches as $key=>$value) {
echo $key . ", " . $value . "<br>";
}
, поскольку вы не беспокоитесь о проверке HTML, вы можете сначала попробовать использовать strip_tags () в тексте, чтобы убрать большую часть мусора.
Затем вы можете найти такое выражение, как
"/\<img .+ \/\>/i"
Обратные косые черты экранируют специальные символы, такие как <,>, /. . + настаивает на том, чтобы внутри тега img было 1 или более любых символов Вы можете записать часть выражения, заключив ее в круглые скобки. например (. +) захватывает среднюю часть тега img.
Когда вы решаете, какую часть середины вы хотите конкретно захватить, вы можете изменить (. +) на что-то более конкретное.