定位器的php地址验证
Posted
技术标签:
【中文标题】定位器的php地址验证【英文标题】:Php address validation for locator 【发布时间】:2012-02-09 17:38:19 【问题描述】:我有一个包含任何地址(无关)的数据库表。
现在的问题是,如果该行包含“Antwerp”、“Antwerpen”或“Anvers”,则它们是相同的,但数据库当然不知道这一点。
我可以有一个包含所有比利时城市的数据库表,我可以让用户通过选择框输入城市,这样就没有错字和城市不同语言的空间。
这可行,但在某些情况下,我想用 facebook 数据自动填充输入字段,但我不知道如何确定哪个城市与 facebook 匹配,因为城市所在的语言取决于用户。
理想情况下,我应该有一个包含所有城市及其翻译的数据库表,但我还没有找到。
我唯一能想到的就是放弃自动填充功能...... :(
有人有其他建议吗?
【问题讨论】:
使用邮政编码怎么样?必须是城市名吗?找到城市邮政编码的数据库要容易得多:) 它可以是任何东西,但 facebook 不返回邮政编码。或者至少不像城市名称那样频繁...... 不要在标题中添加已解决。如果答案是您所希望的,请单击对勾。 【参考方案1】:从wikipedia 或here(谷歌表示“比利时城市列表”)或我们这个world cities database(所有结果来自谷歌)获取数据库。
而不是像这样创建表架构:
CREATE TABLE cities (
id INT AUTO_INCREMENT,
state_id INT, -- If you want to
name VARCHAR(255),
status ENUM( 'confirmed', 'user_added')
PRIMARY (id),
INDEX (status),
UNIQUE KEY (name)
)
您也可以像这样实现对同义词的处理:
CREATE TABLES synonyms (
id INT AUTO_INCREMENT,
city_id INT,
name VARCHAR(255),
PRIMARY(id),
UNIQUE(nane)
)
您可以将城市中的所有值克隆为同义词(数据将保证完整性)并且选择将很容易,或者只是同义词(并在选择它们时编写更复杂的内部连接)并仅在设置新值时使用它们。
无论如何,您将在表单中创建带有“未列出”之类的选项的字段城市(选择框),这将允许用户手动添加城市(状态为user_added
)并且管理员必须检查/添加/删除/编辑手动。
【讨论】:
@issemdanny 具有相同分数(投票)的答案是随机排序的,因此它们被阅读的机会相同。 @issemdanny 如果这是对您问题的回答,您应该点击下方的“okay mark”投票按钮(这样人们就会知道您得到了答案)【参考方案2】:您可以使用Google Geocoding API。只需通过 GET 请求发送地址并使用返回的formatted_address
字段。这应该会给你正确的信息。
我也尝试过一次 Google Places API,但结果很糟糕。
Example Code for PHP/MySQL 可以在这里找到。你必须稍微修改一下这个例子,但它应该会给你一个线索。
【讨论】:
谢谢,但我忘了说我已经研究过了,我想知道怎么办... 注意:Geocoding API 只能与 Google 地图一起使用;禁止在未在地图上显示的情况下对结果进行地理编码。有关允许使用的完整详细信息,请参阅 Maps API 服务许可限制条款。 ----> 并且:请注意,此技术不应用于具有数千个地址的地理编码数据库,因为这违背了此服务的预期用途。 正确。在我对 ToS 的解释中,只需在用户个人资料(或您的管理界面)上显示一个小的静态谷歌地图就足够了。 (但我不是律师,不会给你任何保证)。以上是关于定位器的php地址验证的主要内容,如果未能解决你的问题,请参考以下文章