Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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净化器/MySQL的编码问题_Php_Mysql_Unicode_Encoding - Fatal编程技术网

Php 表单和HTML净化器/MySQL的编码问题

Php 表单和HTML净化器/MySQL的编码问题,php,mysql,unicode,encoding,Php,Mysql,Unicode,Encoding,快把我逼疯了 带有表单的页面通过以下方式编码为Unicode(UTF-8): 数据库中的输入列是text utf8\u unicode\u ci 从Word文档中复制包含“in it,like this:”1922”的文本。是insta fail,并以的形式在数据库中结束��1922.â��(在表单中键入新数据,包括“效果很好…它是从Word中剪切和粘贴的…) PHP的幕后步骤包括: 从帖子中获取价值 运行HTML净化器默认设置 运行mysql\u real\u escape\u字符串 将查

快把我逼疯了

带有表单的页面通过以下方式编码为Unicode(UTF-8):

数据库中的输入列是
text utf8\u unicode\u ci

从Word文档中复制包含“in it,like this:
”1922”的文本。
是insta fail,并以
的形式在数据库中结束��1922.â��(在表单中键入新数据,包括
效果很好…它是从Word中剪切和粘贴的…)

PHP的幕后步骤包括:

  • 从帖子中获取价值
  • 运行HTML净化器默认设置
  • 运行mysql\u real\u escape\u字符串
  • 将查询插入数据库
帮助?

呼叫以让数据库知道您将向其发送UTF-8编码字符串

在表单中键入新数据,包括“工作正常…”

嗯,
是一个普通的ASCII引号
不是,它们是智能引号,是非ASCII字符。它们是否来自文字并不重要;所有非ASCII字符将被视为相同的字符

  • 从帖子中获取价值
  • 运行HTML净化器默认设置
那是个坏主意。HTML净化器应该在HTML字符串上运行,您打算将其输出为HTML,在相对罕见的情况下,您需要让用户提交HTML

对所有输入的文本进行检查是完全错误的。通常,您应该允许任何旧文本,然后当您在HTML中输出该文本时,您应该在其上调用
htmlspecialchars()


否则您将破坏用户输入“1922”的功能。
和“1922”是两个不同的字符串。
word中的引号不是双引号“!=”

您描述的列是排序规则,请确保该列上的字符集设置为
utf8\u unicode\u ci

然后,我会确保您使用
设置名称utf8 COLLATE utf8\U unicode\U ci…

如果您已经这样做了,但仍然没有正确保存,请确保您的php已启用mbstrings,并尝试使用
mb
函数


你可能有很多根本原因,但我认为列上的
charset
SET name…
应该可以解决这个问题。

Hi-Bob!我使用HTML净化器从表单字段中去除所有HTML,因为它确实会显示在网站上。这仍然是一个糟糕的做法吗?如果数据库中的文本内容以原始格式输出TML,这是一件非常糟糕的事情。每次将字符串放入HTML时,您都需要在输出端调用
htmlspecialchars()
,例如:
Hello!

echo“Hello”。htmlspecialchars($name)。!

;永远不要
echo“Hello$name!

。(您可以使用较短的名称创建函数,以避免大量键入。)您根本无法在输入端正确修复此问题,无论是HTMLPurifier还是no。我目前正在通过htmlentities在显示前运行输出。我也不需要使用htmlspecialchars,是吗?您应该使用
htmlspecialchars()
作为
htmlentities()的更好版本
htmlentities
不必要地尝试对所有非ASCII字符进行编码,默认情况下将它们视为ISO-8859-1,因此如果您使用任何其他字符集(如UTF-8),除非您记得在每次调用中传递
charset
参数,否则它将完全扭曲它们。
htmlspecialchars()
只对少数字符进行编码,如
谢谢你一直支持我Bob。今晚我将进行调整并进行测试。在init.php include中调用mysql_query('SET NAMES utf8');是拼图的最后一块,谢谢