<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Парсинг страниц &#8212; ploshadka.net</title>
	<atom:link href="https://ploshadka.net/tag/parsing/feed/" rel="self" type="application/rss+xml" />
	<link>https://ploshadka.net</link>
	<description>Мир интернет технологий</description>
	<lastBuildDate>Sat, 08 Aug 2020 18:59:51 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1</generator>
	<item>
		<title>Как удалить данные на странице с помощью simple_html_dom</title>
		<link>https://ploshadka.net/simple_html_dom-how-remov/</link>
					<comments>https://ploshadka.net/simple_html_dom-how-remov/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 11 Nov 2017 10:24:34 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[simple_html_dom]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3419</guid>

					<description><![CDATA[В продолжение статей о парсинге страниц. На этот раз небольшая заметка о том, как с помощью simple_html_dom удалить ненужные данные на странице. Если надо удалить какой-то участок на странице данных, чтобы они не попадали в парсинг, лучше всего это сделать...]]></description>
										<content:encoded><![CDATA[<p>В продолжение статей о парсинге страниц. На этот раз небольшая заметка о том, как с помощью <a href="https://ploshadka.net/simple_html_dom/">simple_html_dom</a> удалить ненужные данные на странице. <span id="more-3419"></span></p>
<p>Если надо удалить какой-то участок на странице данных, чтобы они не попадали в парсинг, лучше всего это сделать перед началом. А именно в самом верху нашего кода положим такой участок:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach($html -&gt;find('div.class-one') as $matches) {<br />
&nbsp; &nbsp; $matches-&gt;outertext = '';<br />
&nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; // Сохраним в $html новый код<br />
&nbsp; &nbsp; $html-&gt;load($html-&gt;save());</div></div>
<p>Теперь мы можем посмотреть полученное содержимое страницы без не нужных данных и поправить её при необходимости:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo $html</div></div>
<p>Или работать <a href="https://ploshadka.net/simple_html_dom-two-identical-blocks/">дальше в обычном порядке</a>:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach ( $html-&gt;find('') as $matches ) {}</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/simple_html_dom-how-remov/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Недостатки simple_html_dom  или парсинг сложных страниц</title>
		<link>https://ploshadka.net/simple_html_dom-two-identical-blocks/</link>
					<comments>https://ploshadka.net/simple_html_dom-two-identical-blocks/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Fri, 10 Nov 2017 20:14:42 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP примеры и разбор]]></category>
		<category><![CDATA[preg_match()]]></category>
		<category><![CDATA[simple_html_dom]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3404</guid>

					<description><![CDATA[Я уже писал о библиотеке simple_html_dom, с помощью которой можно парсить страницы сайтов. В этой заметке поделюсь некоторыми наработками, когда содержимое имеет одинаковые контейнеры. Что делать когда сложно зацепиться за DOM элементы? По неизвестной мне причине в библиотеке simple_html_dom не...]]></description>
										<content:encoded><![CDATA[<p>Я уже писал о библиотеке <a href="https://ploshadka.net/simple_html_dom/">simple_html_dom</a>, с помощью которой можно парсить страницы сайтов. В этой заметке поделюсь некоторыми наработками, когда содержимое имеет одинаковые контейнеры. <span id="more-3404"></span></p>
<p>Что делать когда сложно зацепиться за DOM элементы? </p>
<p>По неизвестной мне причине в библиотеке simple_html_dom не работает несколько классов в html элементе. Например, не получится найти и сделать выборку по строке:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&lt;div class=&quot;one two three&quot; kakay-to eshe fignya {{&quot;ochen&quot;}} slojnay&gt;нужное нам содержимое&lt;/div&gt;</div></div>
<p>Очевидным будет использовать конструкции вроде:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach ( $html-&gt;find('div.one.two.three') as $matches ) {}</div></div>
<p>или</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach ( $html-&gt;find('div[class=one][class=two][class=three]') as $matches ) {}</div></div>
<p>но на деле это не работает или почти никогда не работает.</p>
<h2>Описание задачи</h2>
<div class="highlight">Задача следующая:</p>
<p><em>Нужно найти два отдельных блока содержимого. Оба блока имеют одинаковые свойства и потому не цепляются по отдельности. </em></div>
<h3>Сначала preg_match потом simple_html_dom</h3>
<p>Для этих целей можно было бы использовать сначала конструкции <a href="https://ploshadka.net/preg_match/">preg_match</a>, чтобы найти определённое содержимое страницы:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/&lt;div class=&quot;one-class&quot;&gt;Заголовок_первый(.*?)&lt;div class=&quot;класс-один класс-два.*?&gt;(.*?)Заголовок_второй/&quot;, $html, $matches);</div></div>
<p>Код выше схватит всё что начинается с &#171;Первого заголовка&#187; и до &#171;второго заголовка&#187;. </p>
<p>Иногда приходится так изощрять код, потому что иначе не захватить точный кусок кода. В базовых примерах php часто даются простые и типовые ситуации, которые не работают в сложных случаях.</p>
<p>А вот ещё один код:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/&lt;div class=&quot;класс-один класс-два.*?&gt;(.*?)Заголовок_второй/s&quot;, $html, $matches);</div></div>
<p>С помощью него мы уже захватим всё что после второго заголовка. </p>
<p>А потом уже из найденного использовать выборку</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach ( $matches-&gt;find('') as $matches ) {}</div></div>
<p>Но здесь возникает другая проблема. Содержимое в переменной matches отказывается пониматься и выводит разного рода ошибки. Даже, если содержимое конвертировать в массивы или строки, всё равно чего-то не хватает. А что именно, совсем не ясно.</p>
<p>Хотя в обратную сторону работает. Если сначала сделать выборку через simple_html_dom, то потом можно вполне забирать информацию через preg_match.</p>
<p>В ином случае остаётся придерживаться одного стиля, либо использовать только preg_match либо simple_html_dom. В данной статье будем использовать только второе.</p>
<p><strong>Дополнено позже</strong>. Проблему описанную выше можно решить с помощью предварительного сохранения результат выборки $matches в отдельных файл, а затем снова использовать функцию <strong>file_get_html()</strong>. Например, так:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">// Важно сохранить данные в файл, иначе повторно библиотека file_get_html работать не будет.<br />
if ( !empty($matches[2]) ) {<br />
&nbsp; &nbsp; file_put_contents($file_temp, $matches[2]);<br />
&nbsp;}<br />
<br />
if ( file_exists($file_temp) ) {<br />
&nbsp; &nbsp; $html = file_get_html($file_temp); // Используем библиотеку<br />
}</div></div>
<h3>Только simple_html_dom</h3>
<p>Если перед парсингом нужно удалить какие-то данные, <a href="https://ploshadka.net/simple_html_dom-how-remov/">воспользуйтесь этой статьёй</a>.</p>
<p>В коде уже привел все пояснения. Первый блок находим так.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">// Задаём счет<br />
$i=0;<br />
// Находим общий контейнер<br />
foreach ( $html-&gt;find('div.class-best') as $matches ) {<br />
&nbsp; &nbsp; $i++;<br />
&nbsp; &nbsp; if($i==2) break; // Останавливаем поиск после первого найденного контейнера<br />
<br />
&nbsp; &nbsp; // Создаём массив из данных<br />
&nbsp; &nbsp; $j=0;<br />
&nbsp; &nbsp; // Теперь в общем контейнере будем забирать нужную нам информацию<br />
&nbsp; &nbsp; foreach ( $matches-&gt;find('div[itemtype=&quot;&quot;]') as $matches2 ) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; $j++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if($j==6) break; // На 6 одинаковом элементе останавливаем поиск<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // Ищем 3 отдельных элемента. <br />
&nbsp; &nbsp; &nbsp; &nbsp; // 1 - Простой текст в ссылке, 2 - простой текст внутри тега span, <br />
&nbsp; &nbsp; &nbsp; &nbsp; // 3 - и ссылку на изображение<br />
&nbsp; &nbsp; &nbsp; &nbsp; @$one = $matches2-&gt;find('a.one', 0)-&gt;plaintext;<br />
&nbsp; &nbsp; &nbsp; &nbsp; @$two = $matches2-&gt;find('span.two', 0)-&gt;plaintext;<br />
&nbsp; &nbsp; &nbsp; &nbsp; @$three = $matches2-&gt;find('img', 0)-&gt;src;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // На всякий случай избавимся от лишних пробелов с обоих сторон найденного<br />
&nbsp; &nbsp; &nbsp; &nbsp; $one = trim($one);<br />
&nbsp; &nbsp; &nbsp; &nbsp; $two = trim($two);<br />
&nbsp; &nbsp; &nbsp; &nbsp; $three = trim($three);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; // Дальше можно поменять содержимое одного найденного объекта<br />
&nbsp; &nbsp; &nbsp; &nbsp; $three = preg_replace('/\/\//','https://',$three); // меняем в начале ссылку '//' на 'https://'<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $our_array[] = $one .', ' .$two .', ' .$three;<br />
&nbsp; &nbsp; }<br />
}</div></div>
<p>В результате этих манипуляций мы получим массив $our_array, в котором будет содержаться такая информация:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">[0]=&gt; 'Простой текст в ссылке', 'Текст внутри span', 'ссылка на фото' [1]=&gt; ...</div></div>
<p>И так 5 строк в массиве. Дальше с этим массив можно делать всё что угодно.</p>
<p>Но задача ещё не закончена. Помните, выше я говорил о втором блоке, который тоже нужно найти? Проблема в том, что он имеет одинаковые свойства с первым блоком, который нам не надо никак захватывать. </p>
<p>Предположим что первый блок меняется и содержит всегда разное количество информации. И не получится это обойти используя наш первый массив, начиная например с 6-ого значения: our_array[5]. Ведь в другой раз, на другой странице, нужные нам данные могут начинаться с третьей позиции или любой другой.</p>
<p>Мы знаем, что второй блок, к счастью начинается сразу за первым. Или любым другим, но идёт всегда в одинаковом порядке. В приведенном примере всегда после первого блока. Тогда добавляем следующую конструкцию:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$i=0;<br />
// Находим общий контейнер<br />
foreach ( $html-&gt;find('div.class-best') as $matches ) {<br />
&nbsp; &nbsp; $i++;<br />
&nbsp; &nbsp; if($i==1) continue; // Пропускаем первый найденный объект <br />
&nbsp; &nbsp; if($i==3) break; // Останавливаем поиск после первого найденного объекта<br />
<br />
&nbsp; &nbsp; Здесь всё тоже самое, что и в первом блоке.<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; $our_array2[] = $one .', ' .$two .', ' .$three;<br />
&nbsp; &nbsp; }<br />
}</div></div>
<p>Как видно, содержимое второго php блока повторяет первый, за исключением того, что мы находим первый блок и пропускаем его с помощью конструкции <strong>if($i==1) continue</strong>. И обязательно останавливаем наш поиск на втором блоке. Иначе схватится лишнее. Одинаковых контейнеров может быть очень много.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/simple_html_dom-two-identical-blocks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как прочитать JSON с помощью PHP</title>
		<link>https://ploshadka.net/json-to-php/</link>
					<comments>https://ploshadka.net/json-to-php/#comments</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sun, 05 Nov 2017 20:00:03 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[explode]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[json_decode]]></category>
		<category><![CDATA[PHP примеры и разбор]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3284</guid>

					<description><![CDATA[Формат JSON представляет из себя упорядоченную, определенным образом, информацию. Это альтернатива формату XML, с более минималистической структурой данных. О том, как прочитать эти данные через PHP. JSON можно прочитать с помощью очень многих языков программирования. Здесь мы будем разбирать пример...]]></description>
										<content:encoded><![CDATA[<p>Формат JSON представляет из себя упорядоченную, определенным образом, информацию. Это альтернатива формату XML, с более минималистической структурой данных. О том, как прочитать эти данные через PHP. <span id="more-3284"></span></p>
<p>JSON можно прочитать с помощью очень многих языков программирования. Здесь мы будем разбирать пример чтения содержимого файла посредством PHP.</p>
<h2>Как прочитать содержимое файла</h2>
<p>В переменную <strong>f_json</strong> заключаем адрес файла JSON:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$f_json = 'http://ploshadka.net/wp-content/uploads/3284/ploshadka.net.json';</div></div>
<p>Затем этот файл достаём по адресу указанному в f_json:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$json = file_get_contents(&quot;$f_json&quot;);</div></div>
<p>Если заглянуть в JSON файл напрямую, можно увидеть следующие данные:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">{&quot;response&quot;:{&quot;items&quot;:[{&quot;id&quot;:&quot;1331&quot;,&quot;title_one&quot;:&quot;Данные заголовка один&quot;,&quot;title_two&quot;:&quot;Данные заголовка два&quot;,&quot;Год&quot;:&quot;2056&quot;,&quot;Items&quot;:&quot;items-1, items-2, items-3, items-4&quot;}]}}</div></div>
<p>Иногда в файле данные выглядят так:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&quot;{&quot;response&quot;:{&quot;items&quot;:[{&quot;id&quot;:&quot;1331&quot;,&quot;title_one&quot;:&quot;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043e\u0434\u0438\u043d&quot;,&quot;title_two&quot;:&quot;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0434\u0432\u0430&quot;,&quot;\u0413\u043e\u0434&quot;:&quot;2056&quot;,&quot;Items&quot;:&quot;items-1, items-2, items-3, items-4&quot;}]}}\n&quot;string(395) &quot;&quot;{&quot;response&quot;:{&quot;items&quot;:[{&quot;id&quot;:&quot;1331&quot;,&quot;title_one&quot;:&quot;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043e\u0434\u0438\u043d&quot;,&quot;title_two&quot;:&quot;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0434\u0432\u0430&quot;,&quot;\u0413\u043e\u0434&quot;:&quot;2056&quot;,&quot;Items&quot;:&quot;items-1, items-2, items-3, items-4&quot;}]}}\n&quot;&quot;</div></div>
<p>Эта &#171;неправильная&#187; кодировка является символами Unicode, записанные в восьмибитной кодировке.</p>
<p>Просмотрим содержимое файла JSON в браузере:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">var_dump(json_decode($json));</div></div>
<p>В данном случае будет отдан массив в одну строчку. Ниже строчка разбита, для наглядности, на несколько строк.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">object(stdClass)#3896 (1) <br />
{ [&quot;response&quot;]=&gt; object(stdClass)#3324 (1) <br />
{ [&quot;items&quot;]=&gt; array(1) { [0]=&gt; object(stdClass)#3330 (5) <br />
{ [&quot;id&quot;]=&gt; string(4) &quot;1331&quot; <br />
[&quot;title_one&quot;]=&gt; string(40) &quot;Данные заголовка один&quot; <br />
[&quot;title_two&quot;]=&gt; string(38) &quot;Данные заголовка два&quot; <br />
[&quot;Год&quot;]=&gt; string(4) &quot;2056&quot; <br />
[&quot;Items&quot;]=&gt; string(34) &quot;items-1, items-2, items-3, items-4&quot; <br />
} } } }</div></div>
<p>Для чтения этих данных декодируем строки файла:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$obj = json_decode($json,true);</div></div>
<p>Теперь выведем объекты в этом файле. Например, мы хотим достать заголовок один, который находится под ключевым атрибутом <strong>title_one</strong>. Для этого воспользуемся следующей командой:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$title_one = $obj['response']['items'][0]['title_one'];</div></div>
<p>Мы сохранили данные в переменную title_one. Теперь с ними можно делать всё что угодно. Например, вывести её:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo $title_one;</div></div>
<p>В этом случае будет показано:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Данные заголовка один</div></div>
<h2>Как получить значение через запятую в массиве данных файла JSON</h2>
<p>Пример посложнее. Мы хотим достать отдельные данные для &#171;items-1, items-2, items-3, items-4&#187;. Чтобы каждое значение было схвачено в отдельную переменную.</p>
<p>Для этого, сначала мы обратимся к этой строке:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$json_items = $obj['response']['items'][0]['Items'];</div></div>
<p>Теперь требуется преобразовать данные из строки в массив. Воспользуемся функцией разбиения строки в PHP:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$arr = explode(&quot;, &quot;, $json_items);</div></div>
<p>Теперь мы можем вывести отдельные элементы так:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo $arr[0];<br />
echo $arr[1];<br />
echo $arr[2];<br />
echo $arr[3];</div></div>
<p>Причем первое значение выводится с параметром [0]. Так исторически сложилось.</p>
<h2>Ошибки при выводе JSON</h2>
<p>Если вы сталкиваетесь с командой вроде:</p>
<div class="highlight">
Notice: Undefined index: title_one in /folder1/folder2/folder3/file.php on line 23</div>
<p>Значит неправильно указан путь к данным.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/json-to-php/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Парсинг данных со страниц сайтов</title>
		<link>https://ploshadka.net/simple_html_dom/</link>
					<comments>https://ploshadka.net/simple_html_dom/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 30 Oct 2017 13:02:48 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP примеры и разбор]]></category>
		<category><![CDATA[simple_html_dom]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3376</guid>

					<description><![CDATA[Заметка о том, как собирать данные со страницы другого сайта с помощью библиотеки simple_html_dom. Я уже касался темы поиска информации на страницы с помощью регулярных выражений и функций preg_match и preg_replace. Также разбирал как менять информацию на странице WordPress записи....]]></description>
										<content:encoded><![CDATA[<p>Заметка о том, как собирать данные со страницы другого сайта с помощью библиотеки simple_html_dom. <span id="more-3376"></span></p>
<p>Я уже касался темы поиска информации на страницы с помощью регулярных выражений и функций <a href="https://ploshadka.net/preg_match/">preg_match</a> и <a href="https://ploshadka.net/preg_replace/">preg_replace</a>. Также разбирал <a href="https://ploshadka.net/post_content-preg_replace-preg_match/">как менять информацию на странице WordPress записи</a>. Теперь разберём сбор информации сторонними инструментами, которые призваны упростить сбор данных.</p>
<h2>simple_html_dom</h2>
<p>Есть несколько библиотек упрощающих парсинг страниц. В данном примере мы будем использовать библиотеку <strong>simple_html_dom.php</strong>. </p>
<p>Библиотеку можно скачать <a href="http://simplehtmldom.sourceforge.net" rel="noopener" target="_blank">на официальном сайте</a>, там же <a href="http://simplehtmldom.sourceforge.net/manual.htm" rel="noopener" target="_blank">инструкции к ней</a>.</p>
<p>Скачиваем архив к себе на компьютер. Разархивируем его и файл simple_html_dom.php заливаем на свой сервер.</p>
<p>Теперь подключаем этот файл:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">include get_template_directory() . '/inc/library/simple_html_dom.php';</div></div>
<p>^^ путь приведен для тем сайтов на WordPress.</p>
<p>Перед работой, в самом файле simple_html_dom.php надо закомментировать строчку:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$contents = file_get_contents($url, $use_include_path, $context, $offset);</div></div>
<p>Вместо неё поставить:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$contents = file_get_contents($url, $use_include_path, $context);</div></div>
<p>Это делается, чтобы избежать ошибок, которые могут появляться:</p>
<div class="highlight">
Notice: Undefined variable: item in /wp-content/themes/ploshadka.net/parser-page.php on line 31</p>
<p>Notice: Undefined offset: 0 in /wp-content/themes/ploshadka.net/parser-page.php on line 89</p>
<p>Notice: Trying to get property of non-object in /wp-content/themes/ploshadka.net/parser-page.php on line 89</p>
<p>php &#8212; Fatal error: Call to a member function find() on a non-object &#8230;</p>
<p>Uncaught Error: Call to a member function findfind() on string in</p>
</div>
<p>В этой статье я не буду касаться того как скачать файл с другого сайта к себе на сервер. Но лучше парсить страницы, предварительно скачав их себе.</p>
<p>Пример нахождения html тега td с классом person.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&lt;?php<br />
<br />
include get_template_directory() . '/inc/library/simple_html_dom.php';<br />
<br />
// Можно вставить адрес страницы напрямую<br />
$url = '/download/file.htm';<br />
<br />
if (file_exists($url)) {<br />
&nbsp; &nbsp; $html = file_get_html($url);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $i=0; // задаём счет<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach ( $html-&gt;find('td.person') as $person ) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $i++;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($i==2) break; // Останавливаем поиск после первого найденного объекта<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $person = $person-&gt;plaintext; // В переменную положим найденное<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;echo $person;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; // Очищаем вывод, чтобы не засорялся буфер обмена<br />
&nbsp; &nbsp; $html-&gt;clear();<br />
&nbsp; &nbsp; unset($html);<br />
}<br />
?&gt;</div></div>
<p>Основные моменты в коде выше я сопроводил пояснениями.</p>
<p>С помощью этого php мы нашли информацию находящуюся в теге:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&lt;td class=&quot;person&quot;&gt;Иван &lt;strong&gt;Иванов&lt;/strong&gt;&lt;/td&gt;</div></div>
<p>Найденное выражение можно вывести в разных вариантах (если варианты существуют, потому что выше мы сузили поиск и ограничили переменной $i).</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Покажет простой текст: Иван<br />
$person = $person-&gt;plaintext;<br />
<br />
Покажет: &lt;td class=&quot;person&quot;&gt;Иван &lt;strong&gt;Иванов&lt;/strong&gt;&lt;/td&gt;<br />
$person = $person-&gt; outertext; <br />
<br />
Покажет содержимое между тегами: Иван &lt;strong&gt;Иванов&lt;/strong&gt;<br />
$person = $person-&gt; innertext; <br />
<br />
Выведет td<br />
$person = $person-&gt; tag;</div></div>
<h2>Примеры поиска и вывода данных</h2>
<p>Найдёт html тег div с id = &#171;table&#187;:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach ( $html-&gt;find('div#table') as $array ) {<br />
}</div></div>
<p>Выведет все текстовые значения внутри ссылки:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">foreach($html-&gt;find('a') as $element) {<br />
&nbsp; &nbsp;echo $element-&gt;plaintext . '&lt;br&gt;';<br />
}</div></div>
<p>Сохранит найденное в переменную, массив данных из которой потом можно вывести отдельно:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$var = $html-&gt;find('a');<br />
echo $var[0]-&gt;plaintext; // вывод данных</div></div>
<p>Отдельные части опять же можно сохранить в переменную:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$var = $var[0]-&gt;plaintext;</div></div>
<p>Также читайте более сложные <a href="https://ploshadka.net/simple_html_dom-two-identical-blocks/">примеры работы с этой библиотекой php</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/simple_html_dom/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Как заменить данные в записях WordPress используя регулярные выражений в PHP</title>
		<link>https://ploshadka.net/post_content-preg_replace-preg_match/</link>
					<comments>https://ploshadka.net/post_content-preg_replace-preg_match/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 30 Oct 2017 11:03:33 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[get_the_content]]></category>
		<category><![CDATA[preg_match()]]></category>
		<category><![CDATA[preg_replace()]]></category>
		<category><![CDATA[single.php]]></category>
		<category><![CDATA[the_content]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3369</guid>

					<description><![CDATA[Уже имеется заметка, как массово поменять текст в WordPress. В этой же статье разберу замену текста при выводе записей (the_content), а также использование регулярных выражений. Замена текста с помощью PHP в записях WordPress Разберем регулярные выражения на примере поиска и...]]></description>
										<content:encoded><![CDATA[<p>Уже имеется заметка, как <a href="https://ploshadka.net/wordpress-text-replace/">массово поменять текст в WordPress</a>. В этой же статье разберу замену текста при выводе записей (<strong>the_content</strong>), а также использование регулярных выражений. <span id="more-3369"></span></p>
<h2>Замена текста с помощью PHP в записях WordPress</h2>
<p>Разберем <a href="https://ploshadka.net/regular-expressions/">регулярные выражения</a> на примере поиска и замены как самого текста, так и элементов внутри определенных дивов при выводе информации в WordPress .</p>
<h3>Для удобства замены преобразуем вывод поста в переменную</h3>
<p>Контент записи в WordPress выводится функцией:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">the_content()</div></div>
<p>Положим <strong>содержимое функции вывода</strong> поста (the_content) в переменную <strong>$content</strong>:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = apply_filters( 'the_content', get_the_content() );</div></div>
<p>Теперь мы можем выводить содержимое поста таким образом:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo $content;</div></div>
<h3>Удаление данных с помощью preg_replace</h3>
<p>Теперь для удаления данных со страницы записи WordPress используем такую конструкцию, которая изменит содержимое переменной $content. А именно найдет в данных нужный нам текст, структуру html и любое другое содержимое, а затем удалит её со страницы.</p>
<p>Удаление содержимого в конкретном див теге (с конкретным классом):</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/(&lt;div.*?class=&quot;price&quot;[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '$1$3', $content);</div></div>
<p>Удаление всего конкретного див тега:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/(&lt;div.*?class=&quot;price&quot;[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '', $content);</div></div>
<p>Остальные примеры можно найти в статье про <a href="https://ploshadka.net/preg_replace/">preg_replace</a>.</p>
<h3>Вывод данных с помощью preg_match</h3>
<p>Вместо предыдущей функции <strong>preg_replace</strong>, где мы убираем текст, с помощью preg_match можно находить конкретные данные и сохранять их в переменную для последующего вывода.</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/&lt;h2&gt;(.*?)&lt;\/h2&gt;/s&quot;, $post-&gt;post_content, $matches);</div></div>
<p>где:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$post-&gt;post_content&quot;</div></div>
<p>то, где мы ищем, в данном случае мы ищем информацию в записи WordPress страницы.</p>
<p>Когда мы нашли мы можем вывести эту запись в любом другом месте. </p>
<p>Вывод записи:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">print($matches [0]);</div></div>
<p>Или даже сохранить в произвольное поле, содержимое которого также можем вывести в любом другом месте.</p>
<p>Больше примеров смотрите в статье о <a href="https://ploshadka.net/preg_match/">preg_match</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/post_content-preg_replace-preg_match/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Примеры функции замены preg_replace в PHP</title>
		<link>https://ploshadka.net/preg_replace/</link>
					<comments>https://ploshadka.net/preg_replace/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 30 Oct 2017 10:46:39 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP примеры и разбор]]></category>
		<category><![CDATA[preg_replace()]]></category>
		<category><![CDATA[str_replace]]></category>
		<category><![CDATA[trim()]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3364</guid>

					<description><![CDATA[С помощью функции preg_replace можно находить и изменять требуемые данные на странице. Также читайте статью, где функцией preg_replace мы удаляем данные в профиле пользователя WordPress. Есть схожая функция, которая вместо замены находит данные для последующей обработки, называется preg_match. Функция preg_replace...]]></description>
										<content:encoded><![CDATA[<p>С помощью функции <strong>preg_replace</strong> можно находить и изменять требуемые данные на странице. <span id="more-3364"></span></p>
<p>Также читайте статью, где функцией preg_replace мы удаляем данные в <a href="https://ploshadka.net/wordpress-user-profile-clean/">профиле пользователя WordPress</a>.</p>
<p>Есть схожая функция, которая вместо замены находит данные для последующей обработки, называется <a href="https://ploshadka.net/preg_match/">preg_match</a>.</p>
<div class="highlight">Функция preg_replace работает следующим образом:</p>
<p>Первый параметр, с помощью <a href="https://ploshadka.net/regular-expressions/">регулярных выражений</a> задаёт критерий поиска.</p>
<p>Второй параметр указывает на что меняем найденные данные.</p>
<p>Третий параметр &#8212; там где мы производим поиск.</p></div>
<h2>preg_replace в DIV</h2>
<p>Удаление содержимого внутри тега DIV:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/(&lt;div[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '$1$3', $content);</div></div>
<p>Удаление содержимого вместе с самим тегом div:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/&lt;div[^&gt;]*&gt;.*?&lt;\/div&gt;/i', '', $content);</div></div>
<p>Удаление содержимого в конкретном див теге (с конкретным классом):</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/(&lt;div.*?class=&quot;price&quot;[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '$1$3', $content);</div></div>
<p>Удаление всего конкретного div тега:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace('/(&lt;div.*?class=&quot;price&quot;[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '', $content);</div></div>
<p>Удаляем изображение из контента:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = preg_replace(&quot;/&lt;img[^&gt;]+\&gt;/i&quot;, &quot;&quot;, $content);</div></div>
<h2>preg_replace для цифр и знаков</h2>
<p>Удаляем всё постороннее кроме цифр:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = preg_replace('~[^0-9]+~','',$content);</div></div>
<p>Удаление доллара спереди:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = preg_replace('/&amp;.*?;/','',$content);</div></div>
<p>Удаление запятой из слов и цифр:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = preg_replace('/,/', '', $content);</div></div>
<p>Удаление пробелов внутри цифры:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = preg_replace('![^\w\d\s]*!','',$content);</div></div>
<h3>Иногда похожие задачи выполняют другие php функции:</h3>
<p>Удаление пробелов с обоих сторон от цифр:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = str_replace(' ','',$content);</div></div>
<p>Удаление всех пробелов сначала и с конца выражения:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$clean_number = trim($content);</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/preg_replace/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Поиск данных с помощью функции preg_match</title>
		<link>https://ploshadka.net/preg_match/</link>
					<comments>https://ploshadka.net/preg_match/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Mon, 30 Oct 2017 10:28:29 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP Errors]]></category>
		<category><![CDATA[implode]]></category>
		<category><![CDATA[PHP примеры и разбор]]></category>
		<category><![CDATA[preg_match()]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3360</guid>

					<description><![CDATA[preg_match &#8212; является функция поиска в PHP. Если функция preg_replace убирает текст, то с помощью preg_match можно находить конкретные данные и сохранять их в переменную для последующего вывода. Если нужна функция замены в PHP при поиске данных, то она называется...]]></description>
										<content:encoded><![CDATA[<p><strong>preg_match</strong> &#8212; является функция поиска в PHP. Если функция <strong>preg_replace</strong> убирает текст, то с помощью preg_match можно находить конкретные данные и сохранять их в переменную для последующего вывода.<span id="more-3360"></span></p>
<p>Если нужна функция замены в PHP при поиске данных, то она называется <a href="https://ploshadka.net/preg_replace/">preg_replace</a>.</p>
<div class="highlight">Функция работает следующим образом.</p>
<p>В первом параметре, с помощью <a href="https://ploshadka.net/regular-expressions/">регулярных выражений</a> задаются критерии поиска.</p>
<p>Во втором параметре, содержится информация, в которой необходимо найти данные.</p>
<p>Последний параметр, то куда мы будем сохранять найденные данные.</p></div>
<p>Найдём все что лежит внутри тега H2:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/&lt;h2&gt;(.*?)&lt;\/h2&gt;/s&quot;, $gde_ishem, $kuda_sohranyaem);</div></div>
<p>Альтернативный вариант:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;|\&lt;h2.*\&gt;(.*\n*)\&lt;/h2\&gt;|isU&quot;, $content, $matches);</div></div>
<p>Найдем конкретный тег:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match('/(&lt;div.*class=&quot;price&quot;&gt;).*(&lt;\/div&gt;)/i', $content, $matches);</div></div>
<p>Находим строку со словом заголовок, которая находится в таблице HTML, между тегами TR:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/&lt;tr[^&gt;](.*?)заголовок(.*?)&lt;\/tr&gt;/s&quot;, $content, $matches);</div></div>
<h2>Пример 1</h2>
<p>Нужно найти ссылку или значение внутри неё. </p>
<p>Это выражение поможет найти данные в ссылке:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/(&lt;a.*?&gt;)(.*?)(&lt;\/a&gt;)/&quot;, $content, $matches);</div></div>
<p>При этом:<br />
matches [0] &#8212; выведет ссылку с элементом<br />
matches [2] &#8212; выведет только элемент внутри ссылки</p>
<p>Вывод содержимого preg_match:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">print($matches [0]);</div></div>
<p>или</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo $matches [1];</div></div>
<p>Параметр [0] &#8212; выводит всё найденное содержимое, а если его поменять на [2] &#8212; то часть строки, которая соответствует второй подмаске (круглые скобки).</p>
<h2>Пример 2</h2>
<p>Имеем такое выражение сложения и равенства:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$content = 100 + 200 = 300;</div></div>
<p>Найдем его отдельные значения:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/(.*)=(.*)/&quot;, $content, $matches);</div></div>
<p>Выведем из него значение 300:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">echo matches[3];</div></div>
<p>Если нам нужна только средняя цифра из примера, мы можем найти выражение иначе:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_match(&quot;/(\+.*\;=.)/&quot;, $content, $matches);</div></div>
<p>Этим способом мы найдём:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&quot;+ 200 = &quot;</div></div>
<p>Если нужно оставить только цифру 200, это можно сделать с помощью функции <a href="https://ploshadka.net/preg_replace/">preg_replace</a>.</p>
<h2>Пример 3</h2>
<p>Найти адрес ссылки внутри изображения:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">&lt; *img[^&gt;]*src *= *[&quot;\']?([^&quot;\']*)</div></div>
<h2>Ошибки в preg_match</h2>
<p>Ошибка такого рода:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">Warning: preg_match() expects parameter 2 to be string, array given in \index.php on line 49</div></div>
<p>Означает, что второй параметр (то в чем мы ищем) должен быть строкой. Это, конечно ни о чем не скажет, если мы не знаем, что подразумевается под строкой (string). Однако, предположим, мы всё же знаем, а поэтому переведём значение из массива в строку:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">$string = implode(&quot;, &quot;, $array);</div></div>
<p>Теперь при поиске preg_match не будет ругаться и успешно выведет нужные данные.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/preg_match/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>API Кинопоиска, рейтинги фильмов</title>
		<link>https://ploshadka.net/api-kinopoisk/</link>
					<comments>https://ploshadka.net/api-kinopoisk/#comments</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 28 Oct 2017 10:23:27 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Полезные сайты]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[Для продажи]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3271</guid>

					<description><![CDATA[Заметка для тех кто ищет API кинопоиска. Понадобились мне определенные данные о фильмах. Начал искать API кинопоиска. Вроде бы проскальзывала информация, что он есть. На деле оказалось, что официального API для кинопоиска не существует. Хотя возможно он есть, но открыт...]]></description>
										<content:encoded><![CDATA[<p>Заметка для тех кто ищет API кинопоиска.  <span id="more-3271"></span></p>
<p>Понадобились мне определенные данные о фильмах. Начал искать API кинопоиска. Вроде бы проскальзывала информация, что он есть. На деле оказалось, что официального API для кинопоиска не существует. </p>
<p>Хотя возможно он есть, но открыт для избранных сайтов и по запросу через поддержку кинопоиска.</p>
<div class="highlight">API – готовый набор данных, предоставляемых сервисом, для использования во внешних программных продуктах.</div>
<p>В сети можно наткнуться на сайт <a href="http://docs.kinopoiskapi.apiary.io" rel="noopener nofollow" target="_blank">docs.kinopoiskapi.apiary.io</a>. Красиво выглядит, но сегодня он не работает. Можно даже не пытаться.</p>
<p>При сильном желании что-то стороннее найдётся. Не буду рекламировать, чтобы не прикрыли, но в любом случае это всё равно работает несовершенно. </p>
<h2>Рейтинги на фильмы</h2>
<p>Официально Кинопоиск отдаёт всем желающим рейтинги по адресу:<br />
<strong>https://rating.kinopoisk.ru/номер фильма.xml</strong></p>
<p>Там есть нюансы, если выводить рейтинги напрямую, то могут быть лаги на сайте. Так что лучше рейтинг сохранять у себя на сайте, а затем выводить.</p>
<div class="highlight">У меня есть готовое решение для WordPress, которое сохраняет рейтинги в произвольное поле сайта, а затем выводит его на сайте. Такую штуку делал для себя. Инструмент продаётся вместе с конечной настройкой, чтобы всё работало. Так что, если лень или не знаете, как сами сделать, обращайтесь.</div>
<h2>Пару слов об API</h2>
<p>Почему разработчики многих сайтов не спешат делать API? Думаю ответ кроется в монетизации. Очевидно, что если вы будете пользоваться сторонними приложениями, то на вас вряд ли как-то можно будет заработать. </p>
<p>С другой стороны API снижает нагрузку на сервисы компании. Ведь, если информация нужна, специалисты всё равно её добудут. </p>
<p>Интересная ссылка как развививалось становление API на <a href="https://habrahabr.ru/company/wargaming/blog/229475/" rel="noopener" target="_blank">habrahabr</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/api-kinopoisk/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Регулярные выражений в PHP</title>
		<link>https://ploshadka.net/regular-expressions/</link>
					<comments>https://ploshadka.net/regular-expressions/#respond</comments>
		
		<dc:creator><![CDATA[Admin]]></dc:creator>
		<pubDate>Sat, 21 Oct 2017 08:10:06 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[preg_match()]]></category>
		<category><![CDATA[preg_replace()]]></category>
		<category><![CDATA[Основательные труды]]></category>
		<category><![CDATA[Парсинг страниц]]></category>
		<category><![CDATA[Регулярные выражения]]></category>
		<guid isPermaLink="false">https://ploshadka.net/?p=3156</guid>

					<description><![CDATA[Заметка о регулярных выражениях. Зачем они нужны, где используются и как их применять. Иными словами о поиске в PHP. Регулярные выражения &#8212; это набор указателей, которые используются в поиске, для нахождения нужных данных. Использование регулярных выражений в функциях PHP, замены...]]></description>
										<content:encoded><![CDATA[<p>Заметка о регулярных выражениях. Зачем они нужны, где используются и как их применять. Иными словами о поиске в PHP. <span id="more-3156"></span></p>
<div class="highlight"><strong>Регулярные выражения</strong> &#8212; это набор указателей, которые используются в поиске, для нахождения нужных данных.</div>
<p>Использование регулярных выражений в функциях PHP, замены <a href="https://ploshadka.net/preg_replace/">preg_replace</a>, поиска <a href="https://ploshadka.net/preg_match/">preg_match</a>. </p>
<p>Например, рассмотрим такую функция:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">preg_replace('/(&lt;div[^&gt;]*&gt;)(.*?)(&lt;\/div&gt;)/i', '$1$3', $string);</div></div>
<p>То что внутри этой функции, все эти на первый взгляд непонятные значения, называется <strong>регулярным выражением (PHP RegEx)</strong>. Они используются для поиска конкретных данных. </p>
<p>Шаблон (символы) поиска берет своё начало с языка <strong>Perl</strong>.</p>
<p>Регулярные выражения делятся на <strong>метасимволы</strong> и <strong>модификаторы</strong> метасимволов.</p>
<p>Метасимволы &#8212; определяют группу обычных символов. Модификаторы &#8212; помогают понять сколько и какое количество этих символов искать.</p>
<h3> Метасимволы регулярного выражения</h3>
<p>Значения некоторых метасимволов из примера выше (также они будут встречаться ниже):</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">^ - начало строки<br />
\ - считать следующий элемент обычным символом (не командой)<br />
. - один произвольный (любой случайный) символ<br />
() - группировка (подмаска)<br />
[ ] - класс символов<br />
$ - конец строки<br />
| - альтернатива (или)</div></div>
<h3>Модификаторы регулярного выражения</h3>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">* - повторять от 0 до бесконечности<br />
? - искать 1 раз или меньше</div></div>
<p>Ещё модификаторы, но не используются в текущих примерах:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">+ - повторять 1 или большее число раз<br />
{n} - точное количество раз (заменить n цифрой)<br />
{n,5} - по меньшей мере 5 раз<br />
{n,m} - не меньше n, но и не больше m</div></div>
<p>Любой из вышеперечисленных модификаторов сочетается с модификатором &#171;?&#187;. Он необходим для ограничения поиска, потому что <strong>по умолчанию</strong> все метасимволы повторяются по принципу <strong>&#171;жадности&#187; (без ограничения)</strong>. </p>
<p>Например:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">(&lt;.*&gt;) - найдет всю строку со всеми тегами<br />
(&lt;.*?&gt;) - найдет только теги</div></div>
<h3>Дополнительные опции</h3>
<p>Кроме модификаторов и метасимволов есть опции (приведены не все):</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">/i - не имеет значения регистр символов (строчные и заглавные)<br />
/s - делает точки (.) переносом строки и возврата каретки (сдвиг влево).<br />
/U - превращается все количественные метасимволы в &quot;не жадные&quot;.</div></div>
<p>Опции могут сочетаться вместе:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">/isU</div></div>
<h3>Шаблоны</h3>
<p>Также существуют шаблоны, что-то вроде аналога метасимволов, один из них:</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">\n - новая строка</div></div>
<p>На данной странице приведены не все параметры регулярных выражений. Это сделано специально, чтобы не запутать новичка и в то же время дать ему основные инструменты для поиска. В дальнейшем, при желании углубиться в детали, в Интернете можно найти более подробную инструкцию.</p>
<h2>Эксперименты</h2>
<p>Поэкспериментировать с регулярным выражением можно <a href="https://regex101.com" rel="noopener" target="_blank">на этом сайте</a>. Вверху вбиваете регулярное выражение, а снизу данные html в которых ищите. При правильном подборе регулярного выражения будет выделяться нужный вам участок кода.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ploshadka.net/regular-expressions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
