The problem is Internet Explorer's. I can't fix Internet Explorer.
There are two methods of storing text on the clipboard, plain text and rich text. Rich text preserves colours or other formatting etc, plain text is just the text characters themselves (this includes basic formatting like spaces, line breaks, tabs etc as these are just additional special characters).
Example code:
function xml2array($contents, $get_attributes=1, $priority = 'tag') {
if(!$contents) return array();
if(!function_exists('xml_parser_create')) {
return array();
}
$parser = xml_parser_create('');
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, trim($contents), $xml_values);
xml_parser_free($parser);
if(!$xml_values) return;
$xml_array = array();
$parents = array();
$opened_tags = array();
$arr = array();
$current = &$xml_array;
$repeated_tag_index = array();
foreach($xml_values as $data) {
unset($attributes,$value);
extract($data);
$result = array();
$attributes_data = array();
if(isset($value)) {
if($priority == 'tag') $result = $value;
else $result['value'] = $value;
}
if(isset($attributes) and $get_attributes) {
foreach($attributes as $attr => $val) {
if($priority == 'tag') $attributes_data[$attr] = $val;
else $result['attr'][$attr] = $val;
}
}
if($type == "open") {
$parent[$level-1] = &$current;
if(!is_array($current) or (!in_array($tag, array_keys($current)))) {
$current[$tag] = $result;
if($attributes_data) $current[$tag. '_attr'] = $attributes_data;
$repeated_tag_index[$tag.'_'.$level] = 1;
$current = &$current[$tag];
} else {
if(isset($current[$tag][0])) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
$repeated_tag_index[$tag.'_'.$level]++;
} else {
$current[$tag] = array($current[$tag],$result);
$repeated_tag_index[$tag.'_'.$level] = 2;
if(isset($current[$tag.'_attr'])) {
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
}
$last_item_index = $repeated_tag_index[$tag.'_'.$level]-1;
$current = &$current[$tag][$last_item_index];
}
} elseif($type == "complete") {
if(!isset($current[$tag])) {
$current[$tag] = $result;
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $attributes_data) $current[$tag. '_attr'] = $attributes_data;
} else {
if(isset($current[$tag][0]) and is_array($current[$tag])) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level]] = $result;
if($priority == 'tag' and $get_attributes and $attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
$repeated_tag_index[$tag.'_'.$level]++;
} else {
$current[$tag] = array($current[$tag],$result);
$repeated_tag_index[$tag.'_'.$level] = 1;
if($priority == 'tag' and $get_attributes) {
if(isset($current[$tag.'_attr'])) {
$current[$tag]['0_attr'] = $current[$tag.'_attr'];
unset($current[$tag.'_attr']);
}
if($attributes_data) {
$current[$tag][$repeated_tag_index[$tag.'_'.$level] . '_attr'] = $attributes_data;
}
}
$repeated_tag_index[$tag.'_'.$level]++;
}
}
} elseif($type == 'close') {
$current = &$parent[$level-1];
}
}
return($xml_array);
}
We can test both types of text formatting by using 2 different apps to paste into. Notepad only supports plain text pasting, wordpad will take rich text pasting.
When copied from Firefox:Notepad (Plain text):
Wordpad (Rich text, it looks the same, but it is going to and from the clipboard via the rich text path):
Now when copied from a piece of shit like Internet Explorer:Notepad (Plain text):
Wordpad (Rich Text):
And so the problem is revealed. Internet Explorer cannot properly manage plain text copying. In RPG Maker, the script tools only accept plain text pasting, and rightly so. The problem is NOT in RPG Maker, or even in notepad. RPG Maker and Notepad are simply pasting from the clipboard what IE wrote to it.
The Problem is the broken way in which Internet Explorer copies via plain text.The solution is incredibly simple and easy, and will make every IE user's life easier:
Stop using it!