将数据从Flash as2保存到数据库时,我遇到了一个非常大的问题。我自己尝试解决了这个问题,在不同论坛上阅读了很多主题但没有结果。
我在as2项目中有一个输入文本字段(mess_txt
),在下一个代码中有一个发送按钮:
on(release){
var formData = new LoadVars();
formData.etext = mess_txt.text;
formData.sendAndLoad("sendmail.php", formData, "POST");
formData.onLoad = function(){
// receive actions...
}
}
sendmail.php中的代码:
include("connect.php");
$text = $_POST['etext'];
$text = str_replace("\r", "<br/>", trim(strip_tags($text)));
$text = str_replace("\n", "", $text);
$text = str_replace("\"", """, $text);
$text = str_replace("'", "'", $text);
$query = "insert into reviews (text, status) values ('".$text."', 'new')";
mysql_query($query) or die (mysql_error());
mail("mail@gmail.com", "Title!", "Message text: ".$text);
当我使用拉丁符号时,两个代码都运行良好但是当我在输入文本中输入西里尔符号时,我在PHP代码中有一个空字符串。
在输入文本中,我使用_self
字体并嵌入所有字形。但我认为问题在于发送数据,因为当发送简单的西里尔字符串而不是mess_txt.text
时,我也有一个空字符串。
有趣的是,当我在PHP代码中使用mb_detect_encoding($_POST['etext'])
时,我获得了ASCII而不是UTF
拜托,帮帮我!!!!
解决!!!
我找到了如何解决这个问题!对其他人来说可能会很有趣......
在将数据从as2发送到php之前,我将其从文本转换为unicode代码。这是我在as2项目中的功能:
on(release){
var txt = getRealText(mess_txt.text);
var formData = new LoadVars();
formData.etext = txt;
formData.sendAndLoad("sendmail.php", formData, "POST");
formData.onLoad = function(){
// receive actions...
}
function getRealText(str){
var newStr = "";
for(i=0, s=str.length; i<s; i++){
newStr += "&#"+ord(str.charAt(i))+";";
}
return newStr;
}
}
结果我发送了字符串“тест
”而不是“тест
”。
在PHP文件中我收到了这个字符串:
$text = html_entity_decode($_POST['etext'], ENT_NOQUOTES, 'UTF-8');
之后我获得了正常的西里尔文(或任何其他文本)。
希望这对某人有用!