所以我有一个表格,当iPhone提交时,如果用户输入'它将被输入数据库中。
我想知道在将其输入数据库之前是否有办法将其转换为单个字符。我需要这个的主要原因是因为它是作为txt消息发送的,并且每个字符都很重要。
我想知道是否有转换这些字符的功能
— enters as — convert to -
– enters as — convert to -
“ enters as “ convert to "
” enters as †convert to "
‘ enters as ‘ convert to '
’ enters as ’ convert to '
问题实际上不是它以这种方式存储在数据库中,而是当从数据库中提取数据时发送txt消息。
在进一步测试中,删除数据库,用表格提交到php并通过电子邮件发送到sms网关进行测试,当使用手机输入“”等字符时不要在txt消息中进行,所以这个让我觉得他们正在成为mojibake。我已在页面中设置了表单。
这是另一个演示问题的插图。这里有一个iPhone(6s iO2 11.2.2 safari)将文本提交到php脚本,该脚本通过电子邮件发送到sms网关,文本没有特殊字符(“”''),而是这些字符显示为ab,示例文本已发送如 “test”'test'将在txt中作为btestb btestb出现。下面是重现此问题的超简单代码。
filename:sms.php(使用php 7.1.13)
<?
if(isset($_POST['sub'])){
$data = isset($_POST['data'])?$_POST['data']:NULL;
if($data){
if(mail('5555555555@messaging.sprintpcs.com','',$data,'From: name@somedomain.com')){
echo 'sent!';
};
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>test</title>
<meta charset="UTF-8" />
<meta content="minimum-scale=1.0, width=device-width, maximum-scale=1, user-scalable=no" name="viewport">
</head>
<body>
<form action="sms.php" method="post" />
<input label="enter txt here" value="" name="data" />
<input type="submit" value="go" name="sub" />
</form>
</body>
</html>
答案 0 :(得分:3)
基本上一切都需要UTF-8才能解决这个问题。追踪腐败发生的地方是乏味的,但这是唯一真正的答案。它可能是早期的,例如当信息进入PHP脚本或进入数据库时,或者稍后检索它时。
要记住的最后可能性是它可能根本没有真正被破坏 - 有时只是终端或其他输出没有正确设置(即链的最末端),它只是在检查它是否因为你的观众而看起来不对,而不是数据本身或它是如何存储的。
答案 1 :(得分:2)
我重新开放是因为这个问题意味着Mojibake来自MySQL; other问题将其视为PHP问题。 PHP和HTML不太可能导致问题;当通过MySQL插入/检索数据时,问题的根源是latin1
和utf8
不匹配。
请参阅Trouble with UTF-8 characters; what I see is not what I stored中的“Mojibake”以及修复数据的方法:http://mysql.rjweb.org/doc.php/charcoll#fixes_for_various_cases。