PHP/JS: Text in die Zwischenablage kopieren (Copy to clipboard)

edit | delete

Autor: Ralf v.d.Mark

eingetragen: Dienstag, 22. November 2022 um 09:41 Uhr (47/2022 Kalenderwoche)

geändert: Mittwoch, 14. Mai 2025 um 16:15 Uhr (20/2025 Kalenderwoche)

Keywords: Zwischenablage kopieren Copy clipboard

Kategorien: PHP-ZF, JavaScript, PHP, PHP-Symfony,

Text:

Die PHP-Funktion "erstelleLink4CopyToClipboard(...)" erzeugt einen Link, der die JavaScript-Funktion "kopiereTextInZwischenablage(...)" nutzt. Diese JS-Funktion kopiert Text, oder den Inhalt eines Feldes (übergebene Feld-ID), in die Zwischenablage. => "Copy to clipboard"


Das Feld "Quellcode" (unten) enthält den kompletten Inhalt für die Funktion, inkl. des JavaScript-Codes.


Empfehlung:


Den QuellCode in eine PHP-Datei speichern, dann im Head-Bereich (oder später) der HTML-Datei inkludieren und anschließend über den Aufruf der PHP-Funktion "erstelleLink4CopyToClipboard('Ich möchte ins ClipBoard!');" benutzen.

Quellcode:  

<?php declare(strict_types=1);
/**
 * Diese Datei enthält alles, um einen Text, oder den Inhalt eines
 * Feldes (übergebene Feld-ID), in die Zwischenablage zu kopieren.
 * (Copy to clipboard)
 *
 * PHP version 8
 *
 * @name       js_kopiereWertInZwischenablage.php
 *             mit Pfad: public\js_kopiereWertInZwischenablage.php
 * @author     Ralf von der Mark (vdM), Ref. 223 (Entwicklung), BLE <Ralf.vonderMark@BLE.de>
 * @copyright  2023, BLE
 * @version    16.07.2023, GIT: Yes
 * @example
 *         include_once 'js_kopiereWertInZwischenablage.php';
 *         echo erstelleLink4CopyToClipboard('Ich muss in die Zwischenablage!');
 *
 *         // oder die ID eines Feldes:
 *         echo erstelleLink4CopyToClipboard('', 'idDesFormularfeldes');
 *
 *         // oder ausführlich:
 *         <h3>'.erstelleLink4CopyToClipboard('',
 *                          'idDesInputfeldes',
 *                          ' (&#128471;&#xFE0F; COPY)',//' (copy)'
 *                          ' (&#9989;&#xFE0F; KOPIERT!)',//' (KOPIERT!)'
 *                          'Klicken kopiert den Wert in Ihre Zwischenablage (Speicher)...').'</h3>
 */


/**
 * Erzeugt einen Link um über die untenstehende JavaScript-Funktion einen
 * beliebigen Text, oder den Inhalt eines Feldes (übergebene Feld-ID),
 * in die Zwischenablage zu kopieren.
 * Bei deaktiviertem JavaScript wird der Link nicht angezeigt!
 *
 * PHP version 8.4
 *
 * @name der Funktion "erstelleLink4CopyToClipboard()"
 * @param string $wert (Wert für clipboard oder leer lassen, dann $idDesInputfeldes nennen)
 * @param string $idDesInputfeldes (optional, NUR wenn $wert leer ist, wird ID-des-Inputfeldes berücksichtigt)
 * @param string $linkTextVorher (optional, Link-Text bevor man klickt)
 * @param string $linkTextNacher (optional, Link-Text nachdem man geklickt hat)
 * @param string $linkTitle (optional, Text des HTML-Title des Links)
 *
 * @return string (fertiger Link, der bei ausgeschaltetem JavaScript unterdrückt wird.) *@author     Ralf von der Mark, Ref. 223 (Entwicklung), BLE <Ralf.vonderMark@BLE.de>
 *
 */
function erstelleLink4CopyToClipboard(
    string $wert,
    string $idDesInputfeldes = '',
    string $linkTextVorher = ' (copy)',
    string $linkTextNacher = ' (KOPIERT!)',
    string $linkTitle = 'Klicken kopiert den Wert in Ihre Zwischenablage (Speicher)...')
{
    $wert = str_replace("'", '\'', ($wert ?? ''));
    $linkTextVorher = str_replace("'", '\'', $linkTextVorher);
    $linkTextNacher = str_replace("'", '\'', $linkTextNacher);
    $linkTitle = str_replace('"', '\"', $linkTitle);
    $eindeutigeId = substr(md5(uniqid((string)mt_rand(), true)), random_int(1, 9), random_int(10, 16));
    return '<a href="javascript: kopiereTextInZwischenablage(\''
        . $wert . '\', \'' . $eindeutigeId . '\', \'' . $idDesInputfeldes . '\', \'' . $linkTextNacher . '\')" 
                        id="' . $eindeutigeId . '" 
                        title="' . $linkTitle . '"
                        style="display: none;"
                        >' . $linkTextVorher
        . '</a><script>document.getElementById("' . $eindeutigeId . '").style.display = "inline";</script>';
}//ENDE: function erstelleLink4CopyToClipboard(...)
?>
<script type="text/javascript">
    /** Funktion kopiert einen übergebenen Text, oder den Inhalt eines Feldes (übergebene Feld-ID),
     *      in die Zwischenablage (Clipboard).
     *
     * @name       JavaScript-Funktion "kopiereTextInZwischenablage()"
     * @author     Ralf von der Mark, Ref. 223 (Entwicklung), BLE <Ralf.vonderMark@BLE.de>
     * @copyright  2022, BLE
     * @version    22.11.2022, GIT: Yes
     *
     * @param textwert (Inhalt der kopiert werden soll)
     * @param idDesLinks (ID des HTML-Tags, der geklickt wird)
     * @param idDesInputfeldes (ID des Formularfeldes, dessen Inhalt in die Zwischenablage soll)
     * @param linkTextNacher (Text der erscheint, wenn der geklickt wurde)
     */
    function kopiereTextInZwischenablage(textwert, idDesLinks, idDesInputfeldes, linkTextNacher) {
        let text4Kopie = 'LEER!';
        if (textwert !== '') {
            //Wenn es einen übergeben Text gibt, dann hier weiter...
            text4Kopie = textwert;
        } else if (idDesInputfeldes !== '') {
            //Wenn der textwert leer ist, aber eine ID eines Formularfeldes übergeben wurde, dann...
            let formularFeld = document.getElementById(idDesInputfeldes);
            if (formularFeld !== null) {
                //Wenn das Feld existiert, dann...
                text4Kopie = formularFeld.value;
            } else {
                //Wenn das Feld nicht existiert, dann...
                text4Kopie = 'Fehler: Feld-ID "' + idDesInputfeldes + '" existiert nicht!';
                linkTextNacher = text4Kopie;
            }//ENDE: else ==> if ()
        } else {
            //Wenn obriges nicht zutrifft, dann...
            document.getElementById(idDesLinks).innerText = 'Wert nicht gefunden!';
        }//ENDE: else ==> if (!empty(idDesLinks)
        navigator.clipboard.writeText(text4Kopie)
            .then(() => {
                //alert("Die Werte wurden in die Zwischenablage (clipboard) kopiert...")
                document.getElementById(idDesLinks).innerText = linkTextNacher;
            })
            .catch(err => {
                alert('Error: Beim Kopieren in die Zwischenablage ist ein Fehler aufgetreten! ',
                    err);
            })
    }//ENDE: function kopiereTextInZwischenablage()
</script>