Php Mysql将引号存储为&39;
我有一些PHP代码,它存储数据库中文本框中键入的任何内容。如果我输入bob's apples,它将作为bob&39;存储在数据库中;这是苹果 有什么问题吗 存储该字符的表具有latin1_swedish_ci的排序规则。看起来您的PHP代码正在使用将特殊字符转换为HTML实体。您可以使用该函数返回原始字符串Php Mysql将引号存储为&39;,php,sql,mysql,character-encoding,collation,Php,Sql,Mysql,Character Encoding,Collation,我有一些PHP代码,它存储数据库中文本框中键入的任何内容。如果我输入bob's apples,它将作为bob&39;存储在数据库中;这是苹果 有什么问题吗 存储该字符的表具有latin1_swedish_ci的排序规则。看起来您的PHP代码正在使用将特殊字符转换为HTML实体。您可以使用该函数返回原始字符串 $a = "bob's apples"; echo htmlentities($a,ENT_QUOTES); // bob&am
$a = "bob's apples";
echo htmlentities($a,ENT_QUOTES); // bob's apples
echo html_entity_decode(htmlentities($a,ENT_QUOTES),ENT_QUOTES); //bob's apples
函数htmlspecialchars(带有第二个参数的ENT_引号)还将单个引号转换为&039
在将HTML转义字符串插入数据库之前,使用htmlspecialchars或htmlentities进行转义,这是一个坏主意。您可以使用html_实体_解码来修复损坏,但最好先不要这样做 应该转义HTML的时间正好在输出到浏览器之前,通常是从SELECT查询中获取的行: 用谷歌搜索XSS 并不是说HTML转义与添加斜杠没有什么关系,在使用mysql\u real\u escape\u string将字符串插入数据库之前,应该添加斜杠。这是为了避免SQL注入漏洞
<?php $row = mysql_fetch_row($result);
echo htmlspecialchars($row['someField']); // good place to escape HTML.
<?php $str = htmlspecialchars($_GET['foo']); // bad place to escape HTML.
$str = mysql_real_escape_string($str); // good place to escape for DB.
$q = 'INSERT INTO .... VALUES (' . $str . ')';
mysql_query($q);
实际上,没有使用该函数或其他类似函数,但解码函数很有用。您确定这与mysql排序规则无关吗?非常确定。打印insert语句并亲自查看。我们必须查看一些代码,但很明显,在输入阶段有HTML转义,正如Ollie解释的那样,这完全是假的。不幸的是,这是PHP作者的一个常见错误。你使用的是某种框架吗?可能是因为一个巨魔看到了你的昵称。
<?php $row = mysql_fetch_row($result);
echo htmlspecialchars($row['someField']); // good place to escape HTML.
<?php $str = htmlspecialchars($_GET['foo']); // bad place to escape HTML.
$str = mysql_real_escape_string($str); // good place to escape for DB.
$q = 'INSERT INTO .... VALUES (' . $str . ')';
mysql_query($q);