首页 > 解决方案 > 需要通过 PHP 解析未过滤的 url 查询,无法处理 '&' 符号

问题描述

首先:我不是专业的 php 开发人员,我只能拼凑一些代码来使基本的东西工作。

我也不知道如何正确命名所有这些东西,所以让我给你一些背景知识:

我们的一个客户想要发送一封电子邮件,其中包含指向 vcard 二维码的链接,其中包含他们客户的联系方式给他们拥有的每个客户(可能在 100-5000 个客户之间)。他们不想手动执行此操作,所以他们要求我提供自动化解决方案。

他们有一个营销工具,允许他们发送包含客户详细信息的大量电子邮件。因此,在电子邮件文本中输入“Hello %name%”将被替换为各自电子邮件中的每个客户姓名。

所以我找到了一个可以满足他们需要的 api,它需要 url 查询字符串来生成一个 vcard qr-code(作为 png 文件)。我制作了一个脚本,它采用自定义查询字符串,其中一些被发送到所述 api,其中一些只是嵌入到页面上,因此人们可以打印包含他们需要的一些额外信息的二维码。

整个系统将用作他们举办的活动的“门票系统”,也就是说,没有高要求,这些门票是免费的,我们的客户希望使用 v-card 二维码以便他们可以扫描入场时的“门票”并验证谁实际上在那里,以便稍后在营销活动中针对他们。

现在进入技术部分:

这是我们正在使用的 api: https ://qrcode.tec-it.com/en/VCard 我们目前使用它的方式是在 html ( <img src="https://qrcode.tec-it.com/API/QRCode?data=BEGIN%3aVCARD%0d%0aVERSION%3a2.1%0d%0aN%3aJohn+Doe%0d%0aTEL%3bHOME%3bVOICE%3a555-555-5555%0d%0aTEL%3bWORK%3bVOICE%3a666-666-6666%0d%0aEMAIL%3aemail%40example.com%0d%0aORG%3aTEC-IT%0d%0aURL%3ahttps%3a%2f%2fwww.example.com%0d%0aEND%3aVCARD&backcolor=%23ffffff" />) 中显示二维码,然后输入 url 查询字符串为一个变量。

这看起来像这样:

$fname = filter_var($_GET['fname'], FILTER_SANITIZE_STRING);
$lname = filter_var($_GET['lname'], FILTER_SANITIZE_STRING);
$email = filter_var($_GET['email'], FILTER_SANITIZE_EMAIL);
$fullname = $fname . ' ' . $lname;

echo '<br><img src="https://qrcode.tec-it.com/API/QRCode?data=BEGIN%3aVCARD%0d%0aVERSION%3a2.1%0d%0aN%3a'.$fullname.'%0d%0aEMAIL%3a'.$email. (...)

现在我们来解决问题:我们客户使用的电子邮件服务只能填写基本字符串,我们无法修改。因此,如果客户的电子邮件理论上包含“&”符号,它将通过指示新的 url 查询字符串来分解 url。我们无法对它们进行编码,也无法进行 http 推送。我们也无法正确访问数据,我们只能将所有内容导出到 csv 中,修改它们并重新导入所有客户(最后一个解决方案)

有什么解决方案吗,所以我们基本上可以接受 url 中的任何字符。我的一个朋友建议在 url 中使用 json,但是 json 只是有不同的字符会破坏一切。其他一切都很好,这只是我目前知道的“&”符号。

PS:我知道php代码不是正确的代码,质量非常低。没关系,客户知道这一点,他们只是想要最便宜的解决方案,因此他们不必手动完成,他们已被告知可能存在的错误和非常存在的安全漏洞。

我希望有人能给我一个正确的方向,一个人怎么可能处理这个?

提前感谢并为低质量的代码和可能不清楚的解释道歉,我正在尽我所能。

标签: phpstringurl

解决方案


推荐阅读