Jump to content

how to copy a string to clipboard(thats been highlight_string() 'd)


Recommended Posts

i want to copy the string to a clipboard, this is a php question because everytime i do $string = highlight_string(); it equals one not the string plus it echos the highlighed string on the page or sometghing.

i am working on this page

http://socialemo.com/boo/

and i have to be able to copy to the clipboard the "dangerous" string that has been visible and not executed by the function highlight_string()

heres my code:

what do i do?

 

 

<?php
highlight_string('<?php phpinfo(); ?><style>
body{background:black;color:pink}
</style>');
?>

To highlight the string you have to copy it to a variable:

 

<?php
$string = highlight_string('<?php phpinfo(); ?><style>
body{background:black;color:pink}
</style>');
?>

 

To Copy it to the clipboard you will need JavaScript to do so, as PHP is server side it has no control what is copied to the client's clipboard.

no u dont understand. this is a php thing because when i echo  the variable that u just put(whcih oove done) it doesnt stay as a value it just echos it. i had to echo it into a hidden input, it messed up everything it doesnt work. it shows it instead of being hidden. its like  aphp override

Well, my bet is that the html is parsing the < > and thinking that is actual html code.

 

<?php
$string = highlight_string('<?php phpinfo(); ?><style>
body{background:black;color:pink}
</style>', true);

$string = htmlentities($string);
?>

<textarea><?php echo $string; ?></textarea>

 

That should be what you are looking for: htmlentities

ok thanks for the true part it makes it not show up when i define the variable. but when it does show up its not just "1" which is good, but well its not good because well this is what it looks like:

<code><span style="color: #000000"> <span style="color: #0000BB"><?php phpinfo</span><span style="color: #007700">(); </span><span style="color: #0000BB">?></span><style><br />body{background:black;color:pink}<br /></style></span> </code>

 

i dont think any one wants to copy that and work it out.

Interesting, well if it does not have to be put into an input or text area here is one option of doing it:

 

<?php
$string = highlight_string('<?php phpinfo(); ?><style>
body{background:black;color:pink}
</style>', true);

//$string = htmlentities($string);
?>

<SPAN ID="copytext" STYLE="height:150;width:162;background-color:pink">
<?php echo $string; ?>
</SPAN>

<TEXTAREA ID="holdtext" STYLE="display:none;">
</TEXTAREA>
<BUTTON onClick="ClipBoard();">Copy to Clipboard</BUTTON> 

<script type="text/javascript">
function ClipBoard()
{
var text = copytext.innerHTML;
text = decoded = Encoder.htmlDecode(text.toString());
holdtext.innerText = text;
Copied = holdtext.createTextRange();
Copied.execCommand("RemoveFormat");
Copied.execCommand("Copy");
}

Encoder = {

// When encoding do we convert characters into html or numerical entities
EncodeType : "entity",  // entity OR numerical

isEmpty : function(val){
	if(val){
		return ((val===null) || val.length==0 || /^\s+$/.test(val));
	}else{
		return true;
	}
},
// Convert HTML entities into numerical entities
HTML2Numerical : function(s){
	var arr1 = new Array(' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','à','á','â','ã','Ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','Ö','×','ø','ù','ú','û','Ü','ý','þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','"','&','<','>','œ','œ','š','š','ÿ','ˆ','˜',' ',' ',' ','‌','‍','‎','‏','–','—','‘','’','‚','“','”','„','†','†','‰','‹','›','€','ƒ','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','σ','τ','υ','φ','χ','ψ','ω','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','ς','σ','τ','υ','φ','χ','ψ','ω','ϑ','ϒ','ϖ','•','…','′','′','‾','⁄','℘','ℑ','ℜ','™','ℵ','←','↑','→','↓','↔','↵','←','↑','→','↓','↔','∀','∂','∃','∅','∇','∈','∉','∋','∏','∑','−','∗','√','∝','∞','∠','∧','∨','∩','∪','∫','∴','∼','≅','≈','≠','≡','≤','≥','⊂','⊃','⊄','⊆','⊇','⊕','⊗','⊥','⋅','⌈','⌉','⌊','⌋','〈','〉','◊','♠','♣','♥','♦');
	var arr2 = new Array(' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','"','&','<','>','Œ','œ','Š','š','Ÿ','ˆ','˜',' ',' ',' ','‌','‍','‎','‏','–','—','‘','’','‚','“','”','„','†','‡','‰','‹','›','€','ƒ','Α','Β','Γ','Δ','Ε','Ζ','Η','Θ','Ι','Κ','Λ','Μ','Ν','Ξ','Ο','Π','Ρ','Σ','Τ','Υ','Φ','Χ','Ψ','Ω','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','ς','σ','τ','υ','φ','χ','ψ','ω','ϑ','ϒ','ϖ','•','…','′','″','‾','⁄','℘','ℑ','ℜ','™','ℵ','←','↑','→','↓','↔','↵','⇐','⇑','⇒','⇓','⇔','∀','∂','∃','∅','∇','∈','∉','∋','∏','∑','−','∗','√','∝','∞','∠','∧','∨','∩','∪','∫','∴','∼','≅','≈','≠','≡','≤','≥','⊂','⊃','⊄','⊆','⊇','⊕','⊗','⊥','⋅','⌈','⌉','⌊','⌋','〈','〉','◊','♠','♣','♥','♦');
	return this.swapArrayVals(s,arr1,arr2);
},	

// Convert Numerical entities into HTML entities
NumericalToHTML : function(s){
	var arr1 = new Array(' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','À','Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö','×','Ø','Ù','Ú','Û','Ü','Ý','Þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','"','&','<','>','Œ','œ','Š','š','Ÿ','ˆ','˜',' ',' ',' ','‌','‍','‎','‏','–','—','‘','’','‚','“','”','„','†','‡','‰','‹','›','€','ƒ','Α','Β','Γ','Δ','Ε','Ζ','Η','Θ','Ι','Κ','Λ','Μ','Ν','Ξ','Ο','Π','Ρ','Σ','Τ','Υ','Φ','Χ','Ψ','Ω','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','ς','σ','τ','υ','φ','χ','ψ','ω','ϑ','ϒ','ϖ','•','…','′','″','‾','⁄','℘','ℑ','ℜ','™','ℵ','←','↑','→','↓','↔','↵','⇐','⇑','⇒','⇓','⇔','∀','∂','∃','∅','∇','∈','∉','∋','∏','∑','−','∗','√','∝','∞','∠','∧','∨','∩','∪','∫','∴','∼','≅','≈','≠','≡','≤','≥','⊂','⊃','⊄','⊆','⊇','⊕','⊗','⊥','⋅','⌈','⌉','⌊','⌋','〈','〉','◊','♠','♣','♥','♦');
	var arr2 = new Array(' ','¡','¢','£','¤','¥','¦','§','¨','©','ª','«','¬','­','®','¯','°','±','²','³','´','µ','¶','·','¸','¹','º','»','¼','½','¾','¿','à','á','â','ã','Ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','Ö','×','ø','ù','ú','û','Ü','ý','þ','ß','à','á','â','ã','ä','å','æ','ç','è','é','ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô','õ','ö','÷','ø','ù','ú','û','ü','ý','þ','ÿ','"','&','<','>','œ','œ','š','š','ÿ','ˆ','˜',' ',' ',' ','‌','‍','‎','‏','–','—','‘','’','‚','“','”','„','†','†','‰','‹','›','€','ƒ','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','σ','τ','υ','φ','χ','ψ','ω','α','β','γ','δ','ε','ζ','η','θ','ι','κ','λ','μ','ν','ξ','ο','π','ρ','ς','σ','τ','υ','φ','χ','ψ','ω','ϑ','ϒ','ϖ','•','…','′','′','‾','⁄','℘','ℑ','ℜ','™','ℵ','←','↑','→','↓','↔','↵','←','↑','→','↓','↔','∀','∂','∃','∅','∇','∈','∉','∋','∏','∑','−','∗','√','∝','∞','∠','∧','∨','∩','∪','∫','∴','∼','≅','≈','≠','≡','≤','≥','⊂','⊃','⊄','⊆','⊇','⊕','⊗','⊥','⋅','⌈','⌉','⌊','⌋','〈','〉','◊','♠','♣','♥','♦');
	return this.swapArrayVals(s,arr1,arr2);
},


// Numerically encodes all unicode characters
numEncode : function(s){

	if(this.isEmpty(s)) return "";

	var e = "";
	for (var i = 0; i < s.length; i++)
	{
		var c = s.charAt(i);
		if (c < " " || c > "~")
		{
			c = "&#" + c.charCodeAt() + ";";
		}
		e += c;
	}
	return e;
},

// HTML Decode numerical and HTML entities back to original values
htmlDecode : function(s){

	var c,m,d = s;

	if(this.isEmpty(d)) return "";

	// convert HTML entites back to numerical entites first
	d = this.HTML2Numerical(d);

	// look for numerical entities "
	arr=d.match(/&#[0-9]{1,5};/g);

	// if no matches found in string then skip
	if(arr!=null){
		for(var x=0;x<arr.length;x++){
			m = arr[x];
			c = m.substring(2,m.length-1); //get numeric part which is refernce to unicode character
			// if its a valid number we can decode
			if(c >= -32768 && c <= 65535){
				// decode every single match within string
				d = d.replace(m, String.fromCharCode(c));
			}else{
				d = d.replace(m, ""); //invalid so replace with nada
			}
		}			
	}

	return d;
},		

// encode an input string into either numerical or HTML entities
htmlEncode : function(s,dbl){

	if(this.isEmpty(s)) return "";

	// do we allow double encoding? E.g will & be turned into &amp;
	dbl = dbl | false; //default to prevent double encoding

	// if allowing double encoding we do ampersands first
	if(dbl){
		if(this.EncodeType=="numerical"){
			s = s.replace(/&/g, "&");
		}else{
			s = s.replace(/&/g, "&");
		}
	}

	// convert the xss chars to numerical entities ' " < >
	s = this.XSSEncode(s,false);

	if(this.EncodeType=="numerical" || !dbl){
		// Now call function that will convert any HTML entities to numerical codes
		s = this.HTML2Numerical(s);
	}

	// Now encode all chars above 127 e.g unicode
	s = this.numEncode(s);

	// now we know anything that needs to be encoded has been converted to numerical entities we
	// can encode any ampersands & that are not part of encoded entities
	// to handle the fact that I need to do a negative check and handle multiple ampersands &&&
	// I am going to use a placeholder

	// if we don't want double encoded entities we ignore the & in existing entities
	if(!dbl){
		s = s.replace(/&#/g,"##AMPHASH##");

		if(this.EncodeType=="numerical"){
			s = s.replace(/&/g, "&");
		}else{
			s = s.replace(/&/g, "&");
		}

		s = s.replace(/##AMPHASH##/g,"&#");
	}

	// replace any malformed entities
	s = s.replace(/&#\d*([^\d;]|$)/g, "$1");

	if(!dbl){
		// safety check to correct any double encoded &
		s = this.correctEncoding(s);
	}

	// now do we need to convert our numerical encoded string into entities
	if(this.EncodeType=="entity"){
		s = this.NumericalToHTML(s);
	}

	return s;					
},

// Encodes the basic 4 characters used to malform HTML in XSS hacks
XSSEncode : function(s,en){
	if(!this.isEmpty(s)){
		en = en || true;
		// do we convert to numerical or html entity?
		if(en){
			s = s.replace(/\'/g,"'"); //no HTML equivalent as &apos is not cross browser supported
			s = s.replace(/\"/g,""");
			s = s.replace(/</g,"<");
			s = s.replace(/>/g,">");
		}else{
			s = s.replace(/\'/g,"'"); //no HTML equivalent as &apos is not cross browser supported
			s = s.replace(/\"/g,""");
			s = s.replace(/</g,"<");
			s = s.replace(/>/g,">");
		}
		return s;
	}else{
		return "";
	}
},

// returns true if a string contains html or numerical encoded entities
hasEncoded : function(s){
	if(/&#[0-9]{1,5};/g.test(s)){
		return true;
	}else if(/&[A-Z]{2,6};/gi.test(s)){
		return true;
	}else{
		return false;
	}
},

// will remove any unicode characters
stripUnicode : function(s){
	return s.replace(/[^\x20-\x7E]/g,"");

},

// corrects any double encoded & entities e.g &amp;
correctEncoding : function(s){
	return s.replace(/(&)(amp;)+/,"$1");
},


// Function to loop through an array swaping each item with the value from another array e.g swap HTML entities with Numericals
swapArrayVals : function(s,arr1,arr2){
	if(this.isEmpty(s)) return "";
	var re;
	if(arr1 && arr2){
		//ShowDebug("in swapArrayVals arr1.length = " + arr1.length + " arr2.length = " + arr2.length)
		// array lengths must match
		if(arr1.length == arr2.length){
			for(var x=0,i=arr1.length;x<i;x++){
				re = new RegExp(arr1[x], 'g');
				s = s.replace(re,arr2[x]); //swap arr1 item with matching item from arr2	
			}
		}
	}
	return s;
},

inArray : function( item, arr ) {
	for ( var i = 0, x = arr.length; i < x; i++ ){
		if ( arr[i] === item ){
			return i;
		}
	}
	return -1;
}

}

</script>

 

Notice I added an htmlEncode/Decode class which I found here: http://www.strictly-software.com/htmlencode

 

Seems to work fine on my end. If you want what is being copied to be hidden, simple set the <span style="display:none;"> Hope that helps a bit :)

 

 

EDIT:

On a side note, if you wanted to use the php's htmlentities to put it into a textarea etc, the following would work:

 

<?php
$string = highlight_string('<?php phpinfo(); ?><style>
body{background:black;color:pink}
</style>', true);

$string = htmlentities($string);
?>

<SPAN ID="copytext" STYLE="height:150;width:162;background-color:pink">
<?php echo $string; ?>
</SPAN>

<TEXTAREA ID="holdtext" STYLE="display:none;">
</TEXTAREA>
<BUTTON onClick="ClipBoard();">Copy to Clipboard</BUTTON> 

<script type="text/javascript">
function ClipBoard()
{
var text = copytext.innerHTML;
text = decoded = Encoder.htmlDecode(Encoder.htmlDecode(text.toString()));
holdtext.innerText = text;
Copied = holdtext.createTextRange();
Copied.execCommand("RemoveFormat");
Copied.execCommand("Copy");
}

 

(For space sake I removed the htmlencode/decode functions, they will be needed for that to work). What I changed was basically in the copy clipboard javascript I decoded the innerText twice, which seemed to work.

thanks but isnt there a easier way for it to work? that is LENGTHY

 

You can find a smaller way to mimic PHP's htmlentities_decode that will work just fine. But you have to decode the string in order for it to copy correctly, unfortunately.

i have to do this for a lot of things on one page because im doing like php specimens.

is there a way to make it for the id it is(the onclick) cause i dont have to hide it i have to show it. so i only need the text once not twice. like isthere some onclick thing that would make the span id th id i click on or something rather than just 1 set id because i have a hwole bunch im going tobe doing like 10+ per page

i have to do this for a lot of things on one page because im doing like php specimens.

is there a way to make it for the id it is(the onclick) cause i dont have to hide it i have to show it. so i only need the text once not twice. like isthere some onclick thing that would make the span id th id i click on or something rather than just 1 set id because i have a hwole bunch im going tobe doing like 10+ per page

 

Honestly, I would mosey on over to the Javascript forum and ask the new question of what you would want to do, as it has turned into a javascript problem and they will probably know more than I would :)

well ever since i put that huge long script in my webpage(i had to save it as unicode to save it)

ive been having outputs that look like this:

扲㹮潷Ⱐ桯眠瑨楳⁷潲歳⁩猠獩浰汥㨠਼扲㹹潵⁣桯潳攠愠獰散業敮⁹潵⁴桩湫⁹潵敥搬਼扲㸠慮搠椠摥獣物扥⁨潷⁴漠畳攠楴ℊ㱢爾佋⁎佗℠汥瑳⁧整⁳灥捩晩挡਼扲㸼扲㸼扲㸊ਊਊ਼摩瘠

obviously i shortened it down but seriously. then i decided to copy all the text from the notepad after i saved it... and then paste it into a new one and ssave it as index.php (ansi) not unicode.

and it didnt go away at first.. so i reloaded then it went back to normal.

now its doing it again after i pasted some other javascript code that had nothing to do with all thsoe characters nor did i do the unicode change eithet. so i copy and pasted it into a new file deleted the old file off the server or whatever and uploaded and it hasnt changed. its a big bunch of those wtf is going on?

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.