Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止替换字符在PHP中变成html实体?_Php_Mysql_Decode - Fatal编程技术网

如何防止替换字符在PHP中变成html实体?

如何防止替换字符在PHP中变成html实体?,php,mysql,decode,Php,Mysql,Decode,我正在处理一个MySQL数据库中的。。。如果它留在那里也没关系,但我正在尝试编辑它。我的表单将角色显示为带有问号的菱形(�). 因此,我提交表单,比较表单上的数据和数据中的数据,看看是否有变化。这里的问题是,当我提交表单时,它会将替换字符转换为�;,这是html实体等价物,因此当发生这种情况时,它会失败比较,并且代码认为字符串已发生变化,这就是有,但不是真的。我尝试过使用不同的方法,或者在比较时将替换字符从数据库转换为等价的html实体——它开始将另一个看似正常的字符转换为等价的ht

我正在处理一个MySQL数据库中的。。。如果它留在那里也没关系,但我正在尝试编辑它。我的表单将角色显示为带有问号的菱形(�). 因此,我提交表单,比较表单上的数据和数据中的数据,看看是否有变化。这里的问题是,当我提交表单时,它会将替换字符转换为�;,这是html实体等价物,因此当发生这种情况时,它会失败比较,并且代码认为字符串已发生变化,这就是有,但不是真的。我尝试过使用不同的方法,或者在比较时将替换字符从数据库转换为等价的html实体——它开始将另一个看似正常的字符转换为等价的html实体替换字符——以及将html实体转换为等价的替换字符aracter——这根本不起作用——但它们都失败了。是的,我试过html_entity_decode()和htmlspecialchars_decode()


我的问题是:如何防止替换字符变成html实体?

请验证html上的编码(例如)


在数据库上(例如在MySQL中)

默认字符集整理

它必须相等。

由于某种原因,webbrowser正在提交� 替换字符(U+FFFD),因为它是十进制的数字HTML实体:
&65533;
。可能您已经以这种方式将其输出到浏览器了

但是,如果希望输入包含HTML实体,如果不想将它们作为HTML存储到数据库中,则需要对它们进行解码。要解码输入UTF-8编码字符串中的数字实体
$str

$convmap = array (0, 0x10FFFF, 0, 0xFFFFFF);
$output = mb_decode_numericentity($str, $convmap, 'UTF-8');
这段代码实际上完成了您想要的转换(),但是您应该首先澄清为什么要提交数字HTML实体

由于您更喜欢unicode,我建议您在网页中使用UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

至于表格:

<form action="" method="post" accept-charset="utf-8">


祝你好运。

当它在PHP中时,或者当它被插入数据库时,它会变成HTML实体吗?所以我将我的网页编码更改为UTF-8,以使其与数据库编码匹配。我仍然无法解码HTML实体。我尝试了
mb\u decode\u numericentity($str,array(0xEF,0xBF,0xBD),'UTF-8'))
当我简单地尝试将html实体解码回php中的字符进行比较时,为什么它必须相等?我甚至还没有到将数据插入数据库的地步。我只是想澄清一下,我并不关心能否正确地看到字符,只是php可以使用它。Page charset=iso-8859-1 db charset=utf8“当我简单地尝试将html实体解码回php中的字符进行比较时,为什么它必须相等?”因为不平等将在以后引起其他问题,所以您需要确保在任何地方都从一种表示转换为另一种表示,并且因为现在您需要一个很好的理由在任何地方使用unicode以外的任何东西。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<form action="" method="post" accept-charset="utf-8">