<?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/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>Du hast nach regex gesucht - Macnotes.de</title>
	<atom:link href="https://macnotes.de/search/regex/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>https://macnotes.de/</link>
	<description>iPhone, iPod, iPad, Mac - das unabhängige Magazin rund um Apple</description>
	<lastBuildDate>Mon, 18 Jul 2022 17:48:25 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://macnotes.de/images/2021/02/image-150x150.jpg</url>
	<title>Du hast nach regex gesucht - Macnotes.de</title>
	<link>https://macnotes.de/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress: Die Suche und Suchergebnisse optimieren</title>
		<link>https://macnotes.de/2021/05/06/wordpress-die-suche-und-suchergebnisse-optimieren/</link>
		
		<dc:creator><![CDATA[Alexander Trust]]></dc:creator>
		<pubDate>Thu, 06 May 2021 11:28:26 +0000</pubDate>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Internet]]></category>
		<guid isPermaLink="false">https://macnotes.de/?p=560075</guid>

					<description><![CDATA[<p>Habt Ihr schon einmal das Gef&#252;hl gehabt, dass die WordPress-Suche unheimlich langsam ist? Dies kann viele Gr&#252;nde haben. Wir wollen Euch in diesem Artikel zweierlei zeigen: Einmal, wie Ihr die Suchergebnisse optimieren k&#246;nnt, beispielsweise indem Ihr sie optisch hervorhebt. Wir wollen Euch aber auch zeigen, wie Ihr die Suche deutlich beschleunigen k&#246;nnt, indem Ihr unn&#252;tze [&#8230;]</p>
<p>Der Beitrag <a href="https://macnotes.de/2021/05/06/wordpress-die-suche-und-suchergebnisse-optimieren/">WordPress: Die Suche und Suchergebnisse optimieren</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class='lead'>Habt Ihr schon einmal das Gef&uuml;hl gehabt, dass die WordPress-Suche unheimlich langsam ist? Dies kann viele Gr&uuml;nde haben. Wir wollen Euch in diesem Artikel zweierlei zeigen: Einmal, wie Ihr die Suchergebnisse optimieren k&ouml;nnt, beispielsweise indem Ihr sie optisch hervorhebt. Wir wollen Euch aber auch zeigen, wie Ihr die Suche deutlich beschleunigen k&ouml;nnt, indem Ihr unn&uuml;tze Abfragen aus der Suche entfernt.</p>
<h2>WordPress-Suche beschleunigen</h2>
</p>
<p>Derzeit entwickle ich f&uuml;r Macnotes ein neues Thema, das ausschlie&szlig;lich AMP nutzt, damit die Website f&uuml;r den Google-Bot, und andere sowohl auf dem Desktop als auch am Smartphone oder Tablet die gleichen Resultate liefert. Diese Konsistenz soll auf Dauer daf&uuml;r sorgen, dass ich &Auml;nderungen an der Website besser mit Erfolgen bei Google in Einklang bringen kann.</p>
<p>In meiner lokalen Entwicklungsumgebung ist mir neulich aufgefallen, wie langsam die Suche ist, und also habe ich mich daran begeben, die Ursache zu finden, und die Suche letzten Endes zu beschleunigen. Ein Plug-in, das Euch dabei behilflich sein kann, ist &bdquo;<a href="https://de.wordpress.org/plugins/query-monitor/">Query Monitor</a>&ldquo; von John Blackbourn. Ihr solltet es aber vor allem in Entwicklungsumgebungen einsetzen, weil es seinerseits einige Ressourcen nutzt und so die Seite selbst verlangsamen kann.</p>
<h3>Tablepress-Ergebnisse verlangsamen die Suche ungemein</h3>
<p>Query Monitor (QM) zeigt Euch unter anderem PHP-Fehler an, es f&auml;ngt aber auch die Datenbankabfragen ab und stellt fest, wie lange sie dauern. Ihr k&ouml;nnt auf diese Weise auch die Abfragen nachverfolgen und so &uuml;ber ein Datenbank-Tool wie <a href="https://apps.apple.com/us/app/sequel-ace/id1518036000?mt=12">Sequel Ace</a> noch einmal nachstellen.</p>
<p>Dabei habe ich zum Beispiel rausgefunden, dass WordPress mit installiertem Tablepress folgende Abfrage startet, wenn Ihr nach &bdquo;iphone 12&ldquo; sucht:</p>
<pre><code class="language-sql">SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND (((wp_posts.post_title LIKE '%iphone%')
OR (wp_posts.post_excerpt LIKE '%iphone%')
OR (wp_posts.post_content LIKE '%iphone%')
OR (wp_posts.post_content REGEXP '[table “” not found /]<br />
?)(9|10|11|13|14|44|45|50)([]"' /])'))
AND ((wp_posts.post_title LIKE '%12%')
OR (wp_posts.post_excerpt LIKE '%12%')
OR (wp_posts.post_content LIKE '%12%')
OR (wp_posts.post_content REGEXP '[table “” not found /]<br />
?)(1|2|3|5|7|10|11|13|14|17|19|20|21|23|30|32|39|41|43|44|47|50|51|55|57|58|59|60)([]"' /])')))
AND wp_posts.post_type IN ('post', 'page', 'attachment', 'buch', 'event', 'firma', 'person', 'plattform', 'produkt')
AND (wp_posts.post_status = 'publish')
ORDER BY (CASE
WHEN wp_posts.post_title LIKE '%iphone 12%'
THEN 1
WHEN wp_posts.post_title LIKE '%iphone%'
AND wp_posts.post_title LIKE '%12%'
THEN 2
WHEN wp_posts.post_title LIKE '%iphone%'
OR wp_posts.post_title LIKE '%12%'
THEN 3
WHEN wp_posts.post_excerpt LIKE '%iphone 12%'
THEN 4
WHEN wp_posts.post_content LIKE '%iphone 12%'
THEN 5
ELSE 6 END), wp_posts.post_date DESC
LIMIT 0, 10; 
</code></pre>
<p>Mal abgesehen von generell ziemlich vielen Zeilen, fallen sofort zwei ins Auge, n&auml;mlich die mit dem &bdquo;REGEXP&ldquo;. Das sind Suchabfragen, die explizit von Tablepress stammen.</p>
<p>Ja und dann habe ich einfach mal ausprobiert, wie lange die Suche mit und ohne diese Zeilen dauert. In der Entwicklungsumgebung waren das 13,7 Sekunden mit Tablepress-Ergebnissen versus 1,39 Sekunden ohne. Es w&uuml;rde zwar auf dem Webserver wegen mehr RAM und Ressourcen, etc. nicht derma&szlig;en auseinander driften, aber es ist trotzdem ein unn&ouml;tiger Ballast.</p>
<p>Denn ich nutze Tabellen nur innerhalb von Texten und in den Texten selber kommen die Suchw&ouml;rter &bdquo;hoffentlich&ldquo; auch vor. Also habe ich mich entschieden, WordPress nicht mehr die Tablepress-Tabellen zu durchsuchen.</p>
<p>Ihr f&uuml;gt dazu folgenden Befehl in die &bdquo;functions.php&ldquo; ein:</p>
<pre><code class="language-php">add_filter( 'tablepress_wp_search_integration', '__return_false' );
</code></pre>
<h3>Unn&ouml;tige Bestandteile entfernen</h3>
<p>Tablepress ist aber nicht das Einzige, das ich aus der Suche entferne. Ihr selbst k&ouml;nnt Euch &uuml;berlegen, welche Beitragstypen (Post Type) Bestandteil der Suche sein sollen. Wenn Ihr beispielsweise f&uuml;r einen &bdquo;Custom Post Type&ldquo; gar kein Archiv habt und stattdessen die Inhalte dahinter mehr wie in einem Glossar nutzt, kann es sich auch lohnen, diese aus der Suche zu entfernen.</p>
<p>Ebenfalls macht es in meinen Augen zum Beispiel keinen Sinn, die &bdquo;Attachments&ldquo; durchsuchen zu lassen. Ich nutze Bilder, PDFs oder Audiodateien und Videos ebenfalls innerhalb von Beitr&auml;gen, und entsprechend kann ich sie aus der Suche rausfiltern.</p>
<p>Das k&ouml;nnt Ihr wie folgt tun:</p>
<pre><code class="language-php"> add_action( 'init', 'sn_exclude_from_search_results' );
function sn_exclude_from_search_results() {
	global $wp_post_types;
	$wp_post_types['attachment']-&gt;exclude_from_search = true;
}
</code></pre>
<h2>Suchw&ouml;rter hervorheben</h2>
<p>Noch etwas finde ich pers&ouml;nlich sehr hilfreich, und zwar das optische Hervorheben von Suchw&ouml;rtern. So kann man den Kontext um das Gesuchte schneller in den Blick nehmen. Dazu ist nat&uuml;rlich ein bisschen CSS notwendig. Also f&uuml;ge ich entsprechend eine Klasse zu den Suchworten hinzu. Das klappt folgenderma&szlig;en:</p>
<pre><code class="language-php">function sn_highlight_title() {
  $title = get_the_title();
  $keys = implode('|', explode(' ', get_search_query()));
  $title = preg_replace('/(' . $keys .')/iu', '&lt;strong class="search-highlight"&gt;</code></pre>
<p>Der Beitrag <a href="https://macnotes.de/2021/05/06/wordpress-die-suche-und-suchergebnisse-optimieren/">WordPress: Die Suche und Suchergebnisse optimieren</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></content:encoded>
					
		
		
		
	</item>
		<item>
		<title>Wie man bei der WordPress-Programmierung für Waffengleichheit sorgt</title>
		<link>https://macnotes.de/2021/03/15/wie-man-bei-der-wordpress-programmierung-fur-waffengleichheit-sorgt/</link>
		
		<dc:creator><![CDATA[Alexander Trust]]></dc:creator>
		<pubDate>Mon, 15 Mar 2021 06:08:48 +0000</pubDate>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">https://macnotes.de/?p=524013</guid>

					<description><![CDATA[<p>Der Titel des Beitrags mag ein wenig kryptisch klingen, dahinter steckt aber eine konkrete Idee, die ich anders gerade nicht umschreiben kann. Die wird aber im Verlauf des Artikels klarer. Noch konkreter geht es um ein Beispiel aus der WordPress-Programmierung und damit um PHP. Allerdings sind diese Konzepte universell einsetzbar, sodass man sie auch in [&#8230;]</p>
<p>Der Beitrag <a href="https://macnotes.de/2021/03/15/wie-man-bei-der-wordpress-programmierung-fur-waffengleichheit-sorgt/">Wie man bei der WordPress-Programmierung für Waffengleichheit sorgt</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class='lead'>Der Titel des Beitrags mag ein wenig kryptisch klingen, dahinter steckt aber eine konkrete Idee, die ich anders gerade nicht umschreiben kann. Die wird aber im Verlauf des Artikels klarer. Noch konkreter geht es um ein Beispiel aus der WordPress-Programmierung und damit um PHP. Allerdings sind diese Konzepte universell einsetzbar, sodass man sie auch in anderen Programmiersprachen abbilden kann und natürlich auch außerhalb von WordPress.</p>
<h2>Worum geht es?</h2>
<p>Stellt Euch vor, Ihr habt eine Idee für eine Funktion oder am Ende des Tages sogar eine Klasse. Nehmen wir an, Ihr wollt eine Funktion programmieren, die Euch egal in welchem Kontext das passende Bild in Form eines Arrays mit Bildinformationen zurückgibt.</p>
<p>Die Funktion gibt Euch diese Bilddaten sowohl auf der Startseite, als auch in den Archiven und aber auch in einzelnen Beiträgen oder Seiten zurück und Ihr könntet Sie außerdem für viele andere Zwecke nutzen, in denen es immer um Bilder geht. Grob also in etwa:</p>
<pre><code>function my_img() {
…
return $img;
}
</code></pre>
<p>Normalerweise verzweifelt man irgendwann daran, dass es viel zu viele Ausnahmen gibt. Denn im Umfeld von WordPress gibt es diverse Funktionen, eine für Artikelbilder (<code>the_post_thumbnail()</code>), eine für Avatare, eine ganz andere, falls Bilder in Form von Metadaten an „Custom Post Types“ angehängt wurden (<code>get_post_meta()</code>), und so fort. Und wenn man die Bilder dann nicht im Rahmen des normalen „Loop“ von WordPress abgreift, sondern mit einem persönlichen Query, dann bekommt man es ohnehin mit einem anderen Ergebnis zu tun (<code>wp_get_attachment_img_src()</code>). Mal hat man dann mit Objekten zu tun, mal mit Arrays, mal mit bloßen Zeichenketten, in denen der URL des Bildes enthalten ist, aber nicht viel mehr.</p>
<p>Ist es nicht nervig, dass man dann überall einen anderen Ansatz für die Entwicklung des eigenen WordPress-Themes benötigt?</p>
<h2>Für Waffengleichheit sorgen</h2>
<p>Wie bekommt man all diese unterschiedlichen Ergebnisse sortiert? Ganz einfach. Indem man für Ordnung sorgt!</p>
<p>Die Absicht hinter einer eigenen Funktion oder sogar einer Klasse ist ja, dass man sie „immer gleich“ nutzen kann. Mithilfe von Parametern kann man dann noch entscheiden, welcher Code ausgegeben werden soll.</p>
<p>Im Laufe der Arbeit müsst Ihr dann einfach mal einen Schritt zurücktreten und schauen, wo überhaupt Gemeinsamkeiten bestehen. Eine WordPressfunktion wie <code>get_the_post_thumbnail()</code> liefert Euch am Ende des Tages einen fertigen HTML-Tag zurück. Für ein Bild, das als Metadaten zu einem Custom Post Type gespeichert wurde, erhaltet Ihr über <code>get_post_meta()</code> die URL zurück, aber keinen fertigen HTML-Tag. Über <code>wp_get_attachment_img_src()</code> gibt es ein Array, das neben der URL auch die Daten für Breite und Höhe enthält.</p>
<p>Wenn Ihr wollt, dass Ihr Eure Funktion immer auf die gleiche Art verwenden könnt, beispielsweise eine ID des Bildes angebt und dann aber ein Array mit URL, Breite und Höhe zurückbekommt, damit Ihr in Eurem Template dann den HTML-Tag selbst erstellen könnt, müsst Ihr einen gemeinsamen Nenner suchen.</p>
<p>Und was ist beispielsweise für den Fall, dass es gar kein Artikelbild gibt? Ja, auch dann müsst Ihr eben ein Array erstellen, das ein Standardbild als URL enthält, und Angaben für dessen Breite und Höhe.</p>
<p>So eine Funktion könnte unvollständigerweise wie folgt ausschauen:</p>
<pre><code>function my_img($id, $standort) {
	switch($standort) {
		case 'Startseite':
			$img = wp_get_attachment_src($id);
			$my_img = [
				'width' =&gt; $img[1],
				'height' =&gt; $img[2],
				'url' =&gt; $img[0]
			];
			break;
		case 'CPT':
			$img = get_post_meta(…);
			$my_img = [
				'width' =&gt; 1920,
				'height' =&gt; 1080,
				'url' =&gt; $img
			];
	}
	// für den Fall, dass noch gar kein Bild-Array erstellt wurde, müssen wir noch eines hinzufügen.

	if(!isset($my_img)) {
		$my_img = [
			'width' = 1920,
			'height' = 1080,
			'url' = 'Adresse zum Standardbild'
		];
	}
	return $my_img;
} 
</code></pre>
<p>Der obige Code ist nicht auf Fehler geprüft, da ich gerade nur einen Texteditor zur Hand habe. Aber mir kam eben gerade jetzt die Idee zu diesem Artikel.</p>
<p>Die Funktion liefert Euch also theoretisch „in jedem Fall“ ein Array mit URL, Breite und Höhe zurück. Auf diese Weise könnt Ihr sie dann immer auf die gleiche Weise verwenden.</p>
<h3>Nicht dem Chaos nachgeben</h3>
<p>Denn es passiert viel zu schnell, dass man sich mit einer Situation zufriedengibt, in der man sagt, ach komm, an dieser Stelle geht es nun mal nicht, weil da hab ich keine ID vom Bild, sondern nur eine vom Kommentar, und brauche aber den Avatar. Ja, genau dann muss man vorab für Waffengleichheit sorgen.</p>
<p>Das kann man entweder „vorher“, also außerhalb der Funktion. Das ist zu begrüßen. Denn eine Funktion sollte tatsächlich nur eine Aufgabe haben und die immer gleich ausführen. Man könnte es theoretisch auch innerhalb der Funktion, aber das würde die Funktion unnötig aufblähen.</p>
<p>Wenn man also eine ID von einem Kommentar hat und aber die ID des zugehörigen Avatar-Bildes benötigt, muss man im Vorfeld erst mit den vorhandenen Daten diese ID rausfinden. Auch dafür könnte man wieder eine eigene Funktion erstellen, wenn es nicht womöglich auch schon eine bei WordPress gibt. Da ist dann im Fall von WordPress <a href="https://developer.wordpress.org/reference/">die Code Reference</a> eine gute Anlaufstelle.</p>
<p>Ich habe persönlich eine Weile gebraucht, bis ich vor Jahren irgendwann gemerkt habe, dass es mir hilft, wenn ich in meinen Funktionen für Waffengleichheit sorge, statt ständig neuen Code zu schreiben, oder aber dutzende Ausnahmen zu schaffen.</p>
<p>Denn wenn Ihr wisst, dass Ihr die Funktion <code>my_img()</code> verwendet und immer auf die gleiche Weise verwenden könnt, habt Ihr beim Durchsehen des Quellcodes wesentlich mehr Überblick und ärgert Euch nicht, dass WordPress in dem Kontext mal so programmiert werden will und in einer anderen Situation aber anders. Ihr könnt dann ruhigen Gewissens Eure Vorlagen entwerfen und müsst nur einmal auf die Animositäten von WordPress Rücksicht nehmen, aber eben nicht immer wieder aufs Neue.</p>
<p>Ihr schafft dann einmal „Ordnung“ und könnt Euch immer darauf verlassen, dass Ihr ein korrektes Ergebnis erhaltet, mit dem Ihr arbeiten könnt.</p>
<h3>Weitere Beispiele</h3>
<p>Die thematisierte Bild-Funktion ist nur ein Beispiel von vielen.</p>
<p>Ich reduziere, wenn ich mit WordPress arbeite, mittlerweile meine Abfragen auf ein Minimum. So kann man eine QUERY nur IDs als Ergebnis zurückgeben lassen, statt vollständige Artikel samt aller Metadaten. Ich bekomme dann ein Array mit IDs zurück und kann es überall sinnvoll einsetzen, egal ob auf der Startseite, in Archiven, oder wo immer ich es möchte.</p>
<p>Statt womöglich mehrere Male einen QUERY zum Beispiel im Template für die Startseite zu nutzen, habe ich mir einfach eine eigene <code>my_query()</code>-Funktion geschrieben. Auch die hat den Vorteil, dass ich immer weiß, was ich am Ende bekomme. Ich kann mittels Parameter den QUERY auf Artikel einer anderen Kategorie steuern. Aber ich kann auch Fälle berücksichtigen, in denen ich vielleicht ähnliche Artikel über Metadaten abfragen möchte. All das kann ich vorab einrichten, sodass ich am Ende bei <code>my_guery()</code> immer die IDs von Artikeln erhalte, mit denen ich weiterarbeiten kann.</p>
<h3>Was geht rein, was soll raus</h3>
<p>„Früher“ &#8482; hab ich eigentlich nie darüber nachgedacht, was ich mit Funktionen erreichen möchte. Also grob schon, aber nie im Detail.</p>
<p>Vor Jahren war der Anspruch eigentlich, ein wenig Arbeit zu erleichtern. Das ist er heute zwar immer noch. Doch wenn man sich darauf besinnt, zu prüfen, welche Daten in eine Funktion hineingehen und welche am Ende herauskommen, kann man sogar noch weitere Optimierungen vornehmen.</p>
<h4>Zu viele Parameter sind ein „Zeichen“!</h4>
<p>Wenn ich beispielsweise merke, dass ich noch einen, und noch einen Parameter brauche und am Ende eine Funktion habe, die zwar alles tut, was sie soll, aber ich womöglich 10, 12 unterschiedliche Parameter brauchen könnte, dann ist das auch nicht im Sinne des Erfinders. Dann ist es eher Zeit, sich vor Augen zu führen, dass ich mit weiteren Funktionen besser bedient bin, um am Ende wieder den Normalzustand herzustellen.</p>
<p>Will heißen: Wenn ich sage, in eine Funktion gehen IDs von Bildern rein und kommen Arrays mit Bildinformationen raus, dann sollte ich diese Funktion nicht damit belasten, aus möglicherweise Artikel-IDs noch Bild-IDs zu extrahieren. Für derartige Fälle kann ich mir lieber einfallen lassen, eine <code>get_my_img_ID()</code>-Funktion zu schreiben, die mir die benötigte Bild-ID liefert, mit der ich meine <code>my_img()</code>-Funktion füttern kann.</p>
<h4>Eine Zeichenkette ist eine Zeichenkette, ist eine Zeichenkette?</h4>
<p>An dieser Stelle möchte ich zum Ausklang noch ein etwas anderes Beispiel aufführen. Vielleicht kennen manche von Euch die WordPress-Funktion <code>wp_remote_get()</code>, wenn nicht, dann könnt Ihr dessen Funktionsweise in der Code Reference von WordPress <a href="https://developer.wordpress.org/reference/functions/wp_remote_get/">nachlesen</a>.</p>
<p>Die Funktion liefert ein Array zurück, das neben den Verbindungsdaten aus dem „Header“ auch den „Body“, also die eigentliche Webseite als Zeichenkette zurückgibt. Wenn Ihr aber am Ende des Tages etwas Anderes benötigt, oder nur Teile davon, dann könnt Ihr natürlich auch hier für Waffengleichheit sorgen, indem Ihr mit einer Funktion das Ergebnis bearbeitet, bis es Euren Bedürfnissen entspricht. Ich habe diese Funktion auch mal verwendet, um URLs von Bildern zu erhalten. Natürlich musste ich dann den Quellcode entsprechend „parsen“.</p>
<h4>Einen hab ich noch …</h4>
<p>Daran anschließen möchte ich noch einen Hinweis, der prima zum Stichwort Parsen passt. Es gibt ein mächtiges Werkzeug zum Parsen von Dokumenten, das sind die regulären Ausdrücke. Damit kann man tolle Sachen machen, allerdings benötigen reguläre Ausdrücke (REGEX) auch eine gewisse Einarbeitungszeit.</p>
<p>Doch wenn Ihr spontan tatsächlich gewisse „Elemente“ einer HTML-Seite extrahieren oder bearbeiten möchtet, sagen wir alle Bilder, oder alle Links, dann eignet sich dafür auch <a href="https://www.php.net/manual/de/class.domdocument.php">die PHP-Klasse DOMDocument</a> relativ gut. Wer schon mal mit Javascript programmiert hat, der wird diese Klasse zu schätzen wissen. Denn sie bietet ähnliche Angriffspunkte wie das auch in Javascript genutzte „Document Object Model“ (DOM) und ist aus diesem Grund leichter zugänglich als reguläre Ausdrücke.</p>
<p>Ihr sucht nach einem Anwendungszweck? Ihr könntet mit Javascript, unter manchen Umständen auch mit CSS, gewisse Links kennzeichnen. Aber wenn der Nutzer Javascript ausschaltet, dann ist auch die Kennzeichnung futsch und mit CSS seid Ihr nicht so flexibel. Also könntet Ihr dann den <code>$content</code> von WordPress mit DOMDocument bearbeiten. Damit Ihr am Ende aber nicht weiteren HTML-Tags oder unnötigen Ballast erhaltet, gibt es mittlerweile in PHP passende Parameter, um das zu unterbinden. Für die Funktion „loadHTML“ gibt es nämlich mittlerweile die Parameter <code>LIBXML_HTML_NOIMPLIED</code> und <code>LIBXML_HTML_NODEFDTD</code>. <a href="https://www.php.net/manual/en/libxml.constants.php">Mehr dazu</a> findet Ihr in der PHP-Dokumentation.</p>
<pre><code>function manipulate_my_content() {
	global $post
	$content = $post-&gt;post_content;
	$document = new DOMDocument();
	$document-&gt;loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
	// links extrahieren oder dergleichen geht dann ganz einfach mit:
	$links = $document-&gt;getElementsByTagName('a');
	// irgendwas mit den Links anfangen
	…
	// den manipulierten Inhalt speichern und wieder zurückgeben
	return $document-&gt;saveHTML();
}
</code></pre>
<p>Diese Ansätze, die ich in dem Beitrag erwähnt habe, helfen mir dabei, Waffengleichheit zu erzielen, und mich bei der Arbeit mit WordPress ein wenig voranzubringen.</p>
<p>Vielleicht helfen Sie Euch ja ebenso. Interessant findet Ihr dann womöglich auch die Beiträge:</p>
<ul>
<li>„<a href="https://macnotes.de/2021/01/24/von-der-idee-zum-wordpress-plug-in-schlagworter-automatisch-hinzufugen-1/">Von der Idee zum WordPress-Plug-in #1</a>“ und</li>
<li>„<a href="https://macnotes.de/2021/01/26/von-der-idee-zum-wordpress-plug-in-schlagworter-automatisch-hinzufugen-2/">Von der Idee zum WordPress-Plug-in #2“</a>.</li>
</ul>
<p>Der Beitrag <a href="https://macnotes.de/2021/03/15/wie-man-bei-der-wordpress-programmierung-fur-waffengleichheit-sorgt/">Wie man bei der WordPress-Programmierung für Waffengleichheit sorgt</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></content:encoded>
					
		
		
		
	</item>
		<item>
		<title>IT-Spezialist hat 10 Millionen Passwörter und Logins veröffentlicht</title>
		<link>https://macnotes.de/2015/02/10/10-millionen-passwoerter-veroffentlicht/</link>
					<comments>https://macnotes.de/2015/02/10/10-millionen-passwoerter-veroffentlicht/#comments</comments>
		
		<dc:creator><![CDATA[Alexander Trust]]></dc:creator>
		<pubDate>Tue, 10 Feb 2015 02:59:18 +0000</pubDate>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Technologie]]></category>
		<guid isPermaLink="false">http://www.macnotes.de/?p=190637</guid>

					<description><![CDATA[<p>IT-Spezialist und -Berater Mark Burnett hat heute 10 Millionen Passwörter und Logins veröffentlicht, zu Forschungszwecken, wie er sagt. Gleichzeitig äußert er die Sorge, das FBI könnte ihn dafür in Gewahrsam nehmen. Einen ganzen Artikel hat Burnett der Veröffentlichung von 10 Millionen Passwörtern und Logins gewidmet. Burnett, der mehrere Bücher über IT-Sicherheit bei Sams und Syngress [&#8230;]</p>
<p>Der Beitrag <a href="https://macnotes.de/2015/02/10/10-millionen-passwoerter-veroffentlicht/">IT-Spezialist hat 10 Millionen Passwörter und Logins veröffentlicht</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class='lead'>IT-Spezialist und -Berater Mark Burnett hat heute 10 Millionen Passwörter und Logins veröffentlicht, zu Forschungszwecken, wie er sagt. Gleichzeitig äußert er die Sorge, das FBI könnte ihn dafür in Gewahrsam nehmen.</p>
<p>Einen ganzen Artikel hat Burnett der Veröffentlichung von 10 Millionen Passwörtern und Logins gewidmet. Burnett, der mehrere Bücher über IT-Sicherheit bei Sams und Syngress veröffentlicht hat, äußert darin die Sorge, die Strafverfolgungsbehörden in den USA könnten ihn dafür einsperren. Er begründet, warum seiner Meinung nach die Veröffentlichung der Daten zu Forschungszwecken relevant ist und erläutert die Gesetzeslage in den USA, die sein Vorgehen offenbar unter Strafe stellt. Laut Burnett sollen die Logins und Passwörter allesamt nicht mehr aktiv genutzt werden, weshalb sie &#8222;im Prinzip&#8220; keine direkte Bedrohung darstellen. Das zu überprüfen ist aber nicht realistisch möglich, weshalb man es als eine Schutzbehauptung ansehen muss.</p>
<blockquote class="notification is-dark is-radiusless mt-4" style="border-left: 2rem solid #22C3A7; display:inline-block;">&#8222;Ultimately, to the best of my knowledge these passwords are no longer be valid and I have taken extraordinary measures to make this data ineffective in targeting particular users or organizations.&#8220;<br /><cite>Mark Burnett</cite></blockquote>
<h2>10 Millionen Passwörter durchsuchen</h2>
<p>Burnett verteilt ein Archiv als Torrent-Download von knapp 90 MByte, das in einer simplen Textdatei von knapp 200 MByte resultiert. Nutzer sollten nicht versuchen die Textdatei mit irgendwelchen Editoren zu öffnen, um darin zu suchen. Das strapaziert die meisten Editoren über. Wer sich die Datei bloß angucken möchte, der kann das natürlich im Editor tun.<br />
Das Suchen erledigt man aber besser mit Hilfe der Kommandozeile / des Terminals. Dabei lautet die einfachste Formel: <code>grep SUCHWORT DATEI</code>. Wer wissen möchte, in welcher Zeile des Dokuments das Ergebnis gefunden wurde fügt einfach den Parameter &#8222;-n&#8220; hinzu, also: <code>grep -n SUCHWORT DATEI</code>.</p>
<p>Da der Grep-Befehl auch einen regulären Ausdruck (REGEX) als Suchwort akzeptiert, kann man sehr komplexe Suchen durchführen.</p>
<h2>Keine E-Mail-Adressen</h2>
<p><a href="https://xato.net/today-i-am-releasing-ten-million-passwords-b6278bbe7495" target="_blank" rel="noopener">Burnett schreibt</a>, er habe die Daten sorgsam ausgewählt. Das bedeutet auch, dass keine E-Mail-Adressen in dem Datensatz enthalten sind, und dass außerdem nicht ersichtlich ist, auf welchen Plattformen oder in welchem Kontext die Logins und Passwörter genutzt wurden. Durch die Beschaffenheit der Datei ist zudem mit Grep zunächst keine Unterscheidung zwischen Login oder Passwort als Suchbegriff möglich. Dadurch, dass jedoch der Abstand zwischen Login und Passwort immer derselbe ist, könnte man den Datensatz bearbeiten und in ein anderes Format übertragen, sogar für eine tabellarische Ansicht überarbeiten.</p>
<p>In jedem Fall hat Burnett mit der Veröffentlichung einigen Script-Kiddies die Liste der Passwörter ihrer Brute-Force-Tools aufgefüllt.</p>
<p>Der Beitrag <a href="https://macnotes.de/2015/02/10/10-millionen-passwoerter-veroffentlicht/">IT-Spezialist hat 10 Millionen Passwörter und Logins veröffentlicht</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://macnotes.de/2015/02/10/10-millionen-passwoerter-veroffentlicht/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
	</item>
		<item>
		<title>Nachschlagewerke für Web-Entwickler auf dem iPhone</title>
		<link>https://macnotes.de/2009/12/31/nachschlagewerke-fur-web-entwickler-auf-dem-iphone/</link>
					<comments>https://macnotes.de/2009/12/31/nachschlagewerke-fur-web-entwickler-auf-dem-iphone/#comments</comments>
		
		<dc:creator><![CDATA[Stefan Keller]]></dc:creator>
		<pubDate>Thu, 31 Dec 2009 16:50:52 +0000</pubDate>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Software]]></category>
		<guid isPermaLink="false">http://www.macnotes.de/?p=28999</guid>

					<description><![CDATA[<p>Wer mit seinem Laptop bewaffnet l&#228;ngere Reisen, etwa Zugfahrten, mit dem Entwickeln von Web-Anwendungen &#252;berbr&#252;ckt, steht oft vor dem Problem, etwas nachschlagen zu wollen. In Ermangelung eines Internetzugangs wird dieses Vorhaben nur allzu oft gestoppt. F&#252;r alle, denen das bekannt vorkommt, stellen wir Euch sechs kosteng&#252;nstige oder gar kostenlose Apps vor, die Euer Tun erleichtern [&#8230;]</p>
<p>Der Beitrag <a href="https://macnotes.de/2009/12/31/nachschlagewerke-fur-web-entwickler-auf-dem-iphone/">Nachschlagewerke für Web-Entwickler auf dem iPhone</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class='lead'>Wer mit seinem Laptop bewaffnet l&auml;ngere Reisen, etwa Zugfahrten, mit dem Entwickeln von Web-Anwendungen &uuml;berbr&uuml;ckt, steht oft vor dem Problem, etwas nachschlagen zu wollen. In Ermangelung eines Internetzugangs wird dieses Vorhaben nur allzu oft gestoppt. F&uuml;r alle, denen das bekannt vorkommt, stellen wir Euch sechs kosteng&uuml;nstige oder gar kostenlose Apps vor, die Euer Tun erleichtern k&ouml;nnen, sofern ihr Euren iPod touch oder Euer <a href="https://macnotes.de/produkt/iphone/">iPhone</a> dabei habt.</p>
<h2>Chmod</h2>
</p>
<p>Wer sich Zugriffsrechte von Dateien auf unixoiden Betriebssystemen (etwa Linux oder Mac OS X) noch nie merken konnte, dem k&ouml;nnte das kleine App Chmod helfen. Es bietet, ohne gro&szlig;es Aufsehen zu erregen, die M&ouml;glichkeit, die Zugriffsrechte einzustellen. Dabei hat der Anwender zwei M&ouml;glichkeiten: Entweder, er setzt die Haken wie er es braucht, oder er verschiebt die Zahlen, um eine Kombination zu testen. Mehr Optionen bietet die App nicht, aber gefallen hat uns eben dies. Da das Programm kostenlos ist, sollte es sich jeder, der mal mit Dateien hantieren m&ouml;chte, ansehen.</p>
<h2>PHP CheatSheet</h2>
<p>F&uuml;r 79 Cent bekommt ihr hier ein App, das auf den Namen PHP CheatSheet h&ouml;rt und eine gute &Uuml;bersicht &uuml;ber PHP bietet. Es ist eine Erkl&auml;rung mit Beispielen enthalten, wie einfache Sprachkonstrukte, beispielsweise Schleifen oder Bedingungen, zu verwenden sind. Dazu gibt es eine Erkl&auml;rung zu allen Datentypen, die PHP mitbringt. Des Weiteren findet sich in der durchsuchbaren Datenbank eine Liste aller PHP-eigenen Funktionen, die nach Anwendung gruppiert ist (etwa Array-Funktionen und Bilder-Funktionen). Diese zeigt jedoch nur den Namen der Funktion an sowie eine kurze Beschreibung, was der Sinn der Funktion ist. Leider fehlen hier sowohl R&uuml;ckgabewerte als auch die Parameterliste. Damit deklassiert sich das App zum Nachschlagewerk f&uuml;r Anf&auml;nger, wobei gerade diesen eine detailliertere Erkl&auml;rung wichtig w&auml;re. Wesentlich besser, daf&uuml;r etwas un&uuml;bersichtlicher, ist da die PHP Reference (siehe n&auml;chster Punkt).</p>
<h2>PHP Ref</h2>
<p>Die PHP Ref-App bietet f&uuml;r ebenfalls 79 Cent die komplette Dokumentation von der Webseite php.net. Diese wird nicht live aus dem Internet abgefragt, sondern befindet sich lokal auf dem iPhone oder iPod. Der Anwender kann entweder in den Funktionen st&ouml;bern oder per Suchfunktion nach dem Namen einer Funktion suchen. Angezeigt wird dann die vollst&auml;ndige Erkl&auml;rung der Funktion inkl. Beispielen und Sonderf&auml;llen, wie es auch bei php.net der Fall ist. F&uuml;r die Anzeige sorgt WebKit, deshalb ist es m&ouml;glich, iPhone-typisch zu zoomen oder das Querformat zu nutzen. Da die Dokumentation von der PHP-Webseite stammt, sind auch Querverweise enthalten, die auf verwandte Funktionen verweisen. Weniger hat uns gefallen, dass die Funktionen alphabetisch aufgelistet werden und nicht nach Art gruppiert werden wie bei CheatSheet. Ebenso wird besonders Kennern der PHP-Webseite auffallen, dass die Suchfunktion keinerlei Toleranz erlaubt. Sucht man auf der PHP-Seite beispielsweise &bdquo;inarray&ldquo;, findet sie &bdquo;in_array&ldquo; und leitet trotz ungenauem Namen korrekt weiter. Dass die App das nicht tut, ist aber aufgrund der Live-Suche w&auml;hrend der Eingabe in den meisten F&auml;llen zu verschmerzen.</p>
<h2>CSS CheatSheet</h2>
<p>CSS CheatSheet bietet f&uuml;r 79 Cent eine umfangreiche Sammlung von Elementen, die in CSS-Deklarationen zum Einsatz kommen k&ouml;nnen. Erkl&auml;rt sind daneben, &auml;hnlich dem PHP CheatSheet, Basics der Sprache, etwa die m&ouml;glichen Einheiten oder die Definitionen einer Farbe. Besonders gut ist dabei die Liste f&uuml;r g&uuml;ltige Werte ausgefallen. Au&szlig;erdem gibt es f&uuml;r fast jedes Element ein Beispiel. Die Datenbank umfasst jedoch nur CSS2-Attribute &ndash; in der Praxis finden CSS3-Deklarationen aber eher selten Anwendung, weil g&auml;ngige Browser wie der Internet Explorer, schon CSS2 nur mit M&uuml;hen verstehen.</p>
<h2>RegEx CheatSheet</h2>
<p>Abermals 79 Cent kostet das CheatSheet f&uuml;r regul&auml;re Ausdr&uuml;cke. Darin findet sich eine Dokumentation f&uuml;r regul&auml;re Ausdr&uuml;cke in verschiedenen Interpretationen. Dazu geh&ouml;ren nicht nur die Meta-Zeichen (etwa der Punkt f&uuml;r ein beliebiges Zeichen), sondern ebenfalls Modifiers, mit denen sich das Verhalten der RegEx beeinflussen l&auml;sst. Die App wartet zus&auml;tzlich mit Erkl&auml;rungen f&uuml;r die einzelnen Sprachen auf, in denen RegEx genutzt werden kann. Zu den Features gesellt sich neben einer Reihe von Beispielen komplexerer Ausdr&uuml;cke, beispielsweise f&uuml;r die &Uuml;berpr&uuml;fung einer g&uuml;ltigen E-Mail-Adresse. Hier zeigt das Programm zudem, was gefunden wird und was nicht.</p>
<p>Hervorzuheben ist das JavaScript-Feld am Ende jeder Seite, mit dessen Hilfe ein Ausdruck auf einen Text angewandt werden kann, um zu &uuml;berpr&uuml;fen, ob er funktioniert. Leider muss ein Ausdruck immer neu eingegeben werden, eine Kopieren und Einf&uuml;gen-Funktion f&uuml;r die Erkl&auml;rungen fehlt.</p>
<h2>iCheatSheet</h2>
<p>Das mit 1,59 Euro teuerste Cheat-Sheet ist der Rundumschlag unter den IT-Referenzen. Diese App beinhaltet eine Vielzahl von Erl&auml;uterungen, die im Umgang mit Programmierung oder Administration gebraucht werden k&ouml;nnten. Dazu geh&ouml;ren etwa Google-Befehle, Emoticons (die in Chats oft zum Einsatz kommen), HTML-Befehle, .htaccess-Optionen, MySQL-Erkl&auml;rungen, VIM-Befehle und viele andere mehr. Die App gl&auml;nzt jedoch nur durch ihren Umfang. Eine Suchfunktion fehlt komplett und die Inhalte wirken zum Teil eingescannt. Eine Ansicht im Querformat gibt es nicht. Dennoch halten wir das Programm f&uuml;r n&uuml;tzlich, denn f&uuml;r den Preis von knapp zwei anderen Cheat-Sheets bekommt der Anwender eine wirklich gro&szlig;e Zahl von Sheets an die Hand, die zwar (optisch) nicht wirklich sch&ouml;n sind, aber im Wesentlichen durch ihren Inhalt &uuml;berzeugen. Jedoch ist iCheatSheet oftmals nicht so ausf&uuml;hrlich, wie es andere Nachschlagewerke sind.</p>
<p>Alle diese Anwendungen haben leider ein Laster gemein: Sie sind allesamt nur in englischer Sprache verf&uuml;gbar. Dar&uuml;ber haben wir bei der Bewertung jedoch hinweg gesehen, denn in der Praxis zeigt sich, dass (Web-)Entwickler der englischen Sprache m&auml;chtig sein sollten. Wer das nicht ist, f&uuml;r den sind die Programme aber leider eher nicht n&uuml;tzlich.</p>
<p>Der Beitrag <a href="https://macnotes.de/2009/12/31/nachschlagewerke-fur-web-entwickler-auf-dem-iphone/">Nachschlagewerke für Web-Entwickler auf dem iPhone</a> erschien zuerst auf <a href="https://macnotes.de">Macnotes.de</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://macnotes.de/2009/12/31/nachschlagewerke-fur-web-entwickler-auf-dem-iphone/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		
	</item>
	</channel>
</rss>
