PHP/JS: Text in die Zwischenablage kopieren (Copy to clipboard)
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',
* ' (🗗️ COPY)',//' (copy)'
* ' (✅️ 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>