php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen Tue, 12 Oct 21 12:04:13 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792408#m1792408 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792408#m1792408 <p>Hallo,</p> <p>ich erhalte immer wieder mal leere Zeilenumbrüche an Enden eines Strings in der db. Bin aber nihct sicher, ob ich die schon per Datenimport aus anderer Software mit importiert habe, oder selber in Textareas verursache.</p> <p>Daher nochmal die Nachfrage:</p> <pre><code class="block language-php"><span class="token variable">$Variable</span> <span class="token operator">=</span> <span class="token function">mysqli_real_escape_string</span><span class="token punctuation">(</span><span class="token variable">$link</span><span class="token punctuation">,</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen oder habe ich das missverstanden?</p> <p>Irgendwie habe ich den Eindruck, dass nur</p> <pre><code class="block language-php"><span class="token variable">$Variable</span> <span class="token operator">=</span> <span class="token function">mysqli_real_escape_string</span><span class="token punctuation">(</span><span class="token variable">$link</span><span class="token punctuation">,</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>das wirklich macht.</p> <p>Jörg</p> php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen Tue, 12 Oct 21 12:18:39 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792409#m1792409 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792409#m1792409 <p>Hallo Jörg,</p> <blockquote> <p>(... mysqli_real_escape_string ...) sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen</p> </blockquote> <p>Äh, nein? Wo findest Du das <a href="https://www.php.net/manual/en/mysqli.real-escape-string.php" rel="nofollow noopener noreferrer">hier</a>?</p> <p>PHP ist zwar kein Wunderwerk an Software-Architektur, aber gelegentlich bekommen sie auch mal was richtig hin: Do One Thing And Do It Right - gilt für Methoden und Funktionen gleichermaßen.</p> <p>Deswegen ist der selbst aufgerufene trim die richtige Lösung.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen Tue, 12 Oct 21 12:19:40 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792410#m1792410 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792410#m1792410 <p>Hallo Jörg,</p> <blockquote> <pre><code class="block language-php"><span class="token variable">$Variable</span> <span class="token operator">=</span> <span class="token function">mysqli_real_escape_string</span><span class="token punctuation">(</span><span class="token variable">$link</span><span class="token punctuation">,</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>sollte doch beim Einfügen in die db alle Leerzeichen und Zeilenumbrüche am Strigende entfernen oder habe ich das missverstanden?</p> </blockquote> <p>keine Ahnung, wer dir das weismachen wollte - nein, das ist nicht so. Die Funktion mysqli_real_escape_string() soll nur Zeichen maskieren, die in einem SQL-Statement eine besondere Bedeutung haben.</p> <blockquote> <p>Irgendwie habe ich den Eindruck, dass nur</p> <pre><code class="block language-php"><span class="token variable">$Variable</span> <span class="token operator">=</span> <span class="token function">mysqli_real_escape_string</span><span class="token punctuation">(</span><span class="token variable">$link</span><span class="token punctuation">,</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token variable">$Variable</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>das wirklich macht.</p> </blockquote> <p>Ja, richtig. <a href="https://www.php.net/manual/en/function.trim.php" rel="nofollow noopener noreferrer">trim()</a> entfernt Whitespace (z.B. Leerzeichen und Zeilenumbrüche) am Anfang und am Ende eines Strings.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Ich bin subfontanell spärlich möbliert. - (Kommentar eines Kandidaten der Quiz-Show "<em>Gefragt, Gejagt</em>" zu seinen eigenen geistigen Leistungen) </div> mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen: TRIM() ... Wed, 13 Oct 21 15:19:40 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792442#m1792442 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792442#m1792442 <p>Da es im Titel steht...</p> <p>TRIM() gibt es auch in MySQL/MariaDB. Tut leider nicht wie in PHP:</p> <pre><code class="block language-sql"><span class="token keyword">select</span> trim<span class="token punctuation">(</span><span class="token string">" text "</span><span class="token punctuation">)</span> <span class="token keyword">as</span> txt<span class="token punctuation">;</span> <span class="token operator">+</span><span class="token comment">-----------------+</span> <span class="token operator">|</span> txt <span class="token operator">|</span> <span class="token operator">+</span><span class="token comment">-----------------+</span> <span class="token operator">|</span> <span class="token keyword">text</span> <span class="token operator">|</span> <span class="token operator">+</span><span class="token comment">-----------------+</span> <span class="token number">1</span> <span class="token keyword">row</span> <span class="token operator">in</span> <span class="token keyword">set</span> <span class="token punctuation">(</span><span class="token number">0.000</span> sec<span class="token punctuation">)</span> </code></pre> <p>trim() kann quasi nur Leerzeichen. Hm. Dann eben mit Regex:</p> <p><strong>Probierte Lösung:</strong></p> <pre><code class="block language-sql"><span class="token keyword">USE</span> test<span class="token punctuation">;</span> <span class="token keyword">CREATE</span> <span class="token keyword">FUNCTION</span> myTrim <span class="token punctuation">(</span>s <span class="token keyword">CHAR</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">RETURNS</span> <span class="token keyword">CHAR</span><span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">)</span> <span class="token keyword">RETURN</span><span class="token punctuation">(</span> REGEXP_REPLACE<span class="token punctuation">(</span> REGEXP_REPLACE<span class="token punctuation">(</span> s<span class="token punctuation">,</span> <span class="token string">"[\r\n\t ]+$"</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"^[\r\n\t ]+"</span><span class="token punctuation">,</span> <span class="token string">''</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> Query OK<span class="token punctuation">,</span> <span class="token number">0</span> <span class="token keyword">rows</span> affected <span class="token punctuation">(</span><span class="token number">0.022</span> sec<span class="token punctuation">)</span> MariaDB <span class="token punctuation">[</span>test<span class="token punctuation">]</span><span class="token operator">></span> <span class="token keyword">select</span> myTrim<span class="token punctuation">(</span><span class="token string">" text "</span><span class="token punctuation">)</span> <span class="token keyword">as</span> txt<span class="token punctuation">;</span> <span class="token operator">+</span><span class="token comment">------+</span> <span class="token operator">|</span> txt <span class="token operator">|</span> <span class="token operator">+</span><span class="token comment">------+</span> <span class="token operator">|</span> <span class="token keyword">text</span> <span class="token operator">|</span> <span class="token operator">+</span><span class="token comment">------+</span> <span class="token number">1</span> <span class="token keyword">row</span> <span class="token operator">in</span> <span class="token keyword">set</span> <span class="token punctuation">(</span><span class="token number">0.000</span> sec<span class="token punctuation">)</span> </code></pre> <p>Die jetzt noch zu sehenden Leerzeichen wurden NUR für die Ausgabe in der Konsole eingefügt, sind nicht in Ergebnissets.</p> php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen Tue, 12 Oct 21 12:21:51 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792411#m1792411 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792411#m1792411 <p>Hi Rolf,</p> <p>nein? Wo findest Du das <a href="https://www.php.net/manual/en/mysqli.real-escape-string.php" rel="nofollow noopener noreferrer">hier</a>?</p> <blockquote></blockquote> <p>Ok, jetzt les ichs selber. Es encodiert die Zeichen "nur".</p> <blockquote> <p>Characters encoded are NUL (ASCII 0), \n, \r, , ', ", and Control-Z.</p> </blockquote> <blockquote> <p>Deswegen ist der selbst aufgerufene trim die richtige Lösung.</p> </blockquote> <p>Gut, dass ich das mal nachgefragt habe. Danke für die Bsetätigung, ich hab den <code>trim()</code> gleich eingebaut.</p> <p>Jörg</p> php/mysql: Überflüssige Zeichen und Zeilenumbrüche am Ende eines Strings entfernen Tue, 12 Oct 21 12:23:17 Z https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792412#m1792412 https://forum.selfhtml.org/self/2021/oct/12/php-mysql-uberflussige-zeichen-und-zeilenumbruche-am-ende-eines-strings-entfernen/1792412#m1792412 <p>Hi Martin,</p> <blockquote> <p>keine Ahnung, wer dir das weismachen wollte - nein, das ist nicht so. Die Funktion mysqli_real_escape_string() soll nur Zeichen maskieren, die in einem SQL-Statement eine besondere Bedeutung haben.</p> </blockquote> <p>Weiß auch nicht, hab mich echt verlesen.</p> <blockquote> <p>Ja, richtig. <a href="https://www.php.net/manual/en/function.trim.php" rel="nofollow noopener noreferrer">trim()</a> entfernt Whitespace (z.B. Leerzeichen und Zeilenumbrüche) am Anfang und am Ende eines Strings.</p> </blockquote> <p>Auch an Dich nochmal danke für die Bestätigung.</p> <p>Jörg</p>