如何打印用单引号保存的从 SQL 检索到的 PHP 数据

Posted

技术标签:

【中文标题】如何打印用单引号保存的从 SQL 检索到的 PHP 数据【英文标题】:How to print in PHP data retrieved from SQL that has been saved with single quote 【发布时间】:2015-11-27 17:20:15 【问题描述】:

我在 SQL 中有一些使用过的保存数据,其名称中有单引号(例如,Marco D'Alba。通过 php,我在我的网站上打印这些名称,但 SQL 会像这样保存该名称:

马可·德安杰洛。

当我打印这些名字时, Marco D\'Angelo 被打印出来。

有什么简单的修复方法吗?

【问题讨论】:

使用 mysql_real_escape_string()mysqli_real_escape_string() 函数。 使用准备好的语句/参数化查询。就这些。 :P 请详细说明but SQL will save that name like this SQL 不会像那样保存名称,您在某处有一些错误的代码会多次转义引号。第一步是修复插入以使用准备好的语句,这样您就不必手动转义字符串。 【参考方案1】:

请这样打印:

$text = "Marco D'Alba";
echo mysql_real_escape_string($text);

mysql_real_escape_string() 函数自 PHP 5.5.0 起已弃用

$text = "Marco D'Alba";
echo mysqli_real_escape_string($text);

如果启用了magic_quotes_runtime,大多数从任何类型的外部源(包括数据库和文本文件)返回数据的函数都将使用反斜杠转义引号。如果magic_quotes_sybase 也打开,则使用单引号而不是反斜杠对单引号进行转义。

您必须在 php.ini 中检查并设置“magic_quotes_runtime”和“magic_quotes_sybase”

【讨论】:

当用户插入他的名字时,我已经在使用 mysql_real_escape_string。 $value2 = mysql_real_escape_string($_POST['Surname']);数据库仍将其保存为 Mauro D'\Alba!所以当我去打印它时(即使我打印时使用mysqlrealescapestring,它仍然会打印单引号! 我已经修改了我的答案。请检查 php.ini 中的“magic_quotes_runtime”和“magic_quotes_sybase”【参考方案2】:

如果您想打印并摆脱单引号,请尝试使用

echo stripslashes("Marco D\'Angelo");

【讨论】:

以上是关于如何打印用单引号保存的从 SQL 检索到的 PHP 数据的主要内容,如果未能解决你的问题,请参考以下文章

sql 如何查询单引号

如何向数据库中保存单引号,双引号等字符

存储过程中执行sql语句时如何转义双引号?

sql语句中啥时候用单引号啥时候用双引号?如图中的红为啥用双引号?

保存用 rest 和 php 检索到的 XML

sql server 如何去除双引号