【问题标题】:angle bracket mysql php [duplicate]尖括号mysql php [重复]
【发布时间】:2013-04-05 08:16:25
【问题描述】:

当 VARCHAR 字段中的文本被尖括号('' 字符)包围时,我无法从 MySQL 数据库中获取数据。

让我更具体一点。这是我从中获取数据的表:

mysql> 描述味精; +---------------+---------+------+---- -+---------+--------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +---------------+---------+------+---- -+---------+--------+ |分区标签 |整数(11) |否 |优先级 | 0 | | | mail_id |变量二进制(16) |否 |优先级 |空 | | |秘密ID |变量二进制(16) |是 | | | | | am_id | varchar(20) |否 | |空 | | | time_num | int(10) 无符号 |否 |穆尔 |空 | | | time_iso |字符(16) |否 | |空 | | |席位 | bigint(20) 无符号 |否 |穆尔 |空 | | |政策 | varchar(255) |是 | | | | |客户地址 | varchar(255) |是 | | | | |尺寸 | int(10) 无符号 |否 | |空 | | |原产地|字符(1) |否 | | | | |内容 |字符(1) |是 | |空 | | |夸类型 |字符(1) |是 | |空 | | |夸洛克 |变量二进制(255) |是 | | | | | dsn_sent |字符(1) |是 | |空 | | |垃圾邮件级别 |浮动 |是 | |空 | | | message_id | varchar(255) |是 |穆尔 | | | |从地址 | varchar(255) |是 | |空 | | |主题 | varchar(255) |是 | | | | |主持人 | varchar(255) |否 | |空 | | +---------------+---------+------+---- -+---------+--------+ mysql> select * from msgs LIMIT 1; +---------------+--------------+--------------+--- --------+------------+------+-----+---- ----+--------------+------+--------------+--------- +-----------+-------------+----------+----------- -+--------------------------------+---------------- ------------+---------+-------------- -----+ |分区标签 | mail_id |秘密ID | am_id | time_num | time_iso |席位 |政策 |客户地址 |尺寸 |原产地|内容 |夸类型 |夸洛克 | dsn_sent |垃圾邮件级别 | message_id |从地址 |主题 |主持人 | +---------------+--------------+--------------+--- --------+------------+------+-----+---- ----+--------------+------+--------------+--------- +-----------+-------------+----------+----------- -+--------------------------------+---------------- ------------+---------+-------------- -----+ | 0 | 0qJcjCXZM8K3 | 7a8Q1_crCzuj | 02085-01 | 1365578237 | 20130410T071717Z | 4 |我的网| 172.31.255.5 |第1246章是 |五 |问 | 0qJcjCXZM8K3 | N | -1 | |用户名 |测试 |本地主机 | +---------------+--------------+--------------+--- --------+------------+------+-----+---- ----+--------------+------+--------------+--------- +-----------+-------------+----------+----------- -+--------------------------------+---------------- ------------+---------+-------------- -----+

当通过 PHP MySQLi 接口执行查询时(例如:SELECT * from msgs),from_addr 字段仅显示第一部分(在本例中为“用户名”),但不显示尖括号(在本例中为“test@test.it”)。

目前,我通过在 mysql 查询中使用 REPLACE 语句来解决这个问题,用方括号代替尖括号。但是,我想知道如何正确查询尖括号内的文本。

谢谢大家。

【问题讨论】:

  • 你是在 HTML 页面中输出这个吗?因为如果您是,它将被解释为 HTML 标记 - 它会显示在源代码中。您可以在输出上执行 str_replace 以将 <><> 交换
  • 使用mysql_real_escape_string()函数,它会帮助你
  • 如果你在 PHP 中加载这个,看看这个函数:php.net/manual/en/function.htmlspecialchars.php

标签: php html mysql xss brackets


【解决方案1】:

from_addr 的输出将在您收到查询结果时出现。

看看这个例子:

$string = '<hello world>';
echo $string;
echo htmlspecialchars('<hello world>');

echo $string 将显示在源代码中,但被视为标签,因此不会“在屏幕上”显示。

使用htmlspecialchars() 会将&amp;lt; &amp;gt; 更改为&amp;lt; &amp;gt;,这将显示“在屏幕上”。

您似乎正在将此字段用于电子邮件,因此我不建议您使用 htmlspecialchars 保存到数据库中,因为您希望电子邮件能够正确发送。

如果以上内容没有完全回答您的问题,并且您希望在数据库中查询电子邮件而不是“发送名称”,我建议使用LIKE

SELECT * FROM `msgs` WHERE `from_addr` LIKE '<%INSERT_EMAIL_ADDRESS%>'.

希望这会有所帮助。

【讨论】:

  • 好的,问题解决了:)
  • 虽然我已经在使用 htmlspecialchars 来转义特殊字符,但我的 PHP 脚本中的一个逻辑错误导致这个函数永远不会被调用。谢谢大家的耐心和礼貌。
猜你喜欢
  • 2015-12-23
  • 2011-12-13
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多