现在在帖子阅读页看到的ip归属信息(来自:)是通过某个函数从本地数据库文件ipdata.dat读取出来然后写进帖子数据表,最后在屏幕上呈现。然而,这个数据并不是太准确,这么多年了,一直耿耿于怀,一直想让这个数据更准确些。最简单有效的方法就是获取上面最新版的数据库文件,可网络上并不好找,官方已经不提供这种格式的文件了。
怎么办呢?有没有其它的方法?网络上有很多查询ip归属的网站,如果能把查询结果提取出来,写进帖子信息数据表里不就准确多了吗?于是,从去年12月6日开始了尝试:
“之前是没有能力解决这个问题,唯一能想到的办法就是更新ipdata.dat文件,然而不好找。现在想到的办法则是抛弃这种传统的获取方式,改为通过论坛获取到的ip地址把对应的地理位置保存起来,然后发帖的时候直接把这个地址写进数据表。”(引用内容)
经过不断的努力,终于能够获取到ip归属信息并能写进数据表,又进一步在后台添加了开关,可以选择使用网络获取还是本地。然而,后来mb_convert_encoding()这个把utf-8编码转换为gbk的关键函数不知道为什么不能用了。问deepseek,也是用这个函数转换,可问题是这个函数无效啊。
函数转换的方法一直没有最后的结果,只能另辟蹊径了。想到以前用一种特殊的字符组合表示中文汉字,就是“查”这种形式的,到底叫什么,我也不了解。然后就想如何把中文转换成这样式儿的。经过不懈的努力,终于在本月14日找到了这个转码关键函数utf8ToNumericEntities()。虽然模样有点儿怪,但通用性应该很好,浏览器都支持。
这样,ip归属以一种特殊的符号形式写进帖子数据表中。只是,这种网络获取的方式,每个回帖都要访问外网,速度可能受到影响,更主要是担心外网可能拒绝来自本站的访问。既然前面已经成功了,我们可以把ip地址和归属的对应关系存储在一个数据表中,发帖时先本地查询,如果有则直接读取;没有记录的话,再访问外网并记录,下次同样的ip还是本地查询。这样,速度更快,也能让数据更准确。
经过最近几天的努力,构建数据表,修改添加自增字段id,成功写进多条测试数据,数据表完成!然后就是写查询数据表的语句,有符合条件的ip地址,直接从表中读取归属地;没有的话,访问外网获取并存储数据。
到此,全部设想实现。
“Google了一下,这东西专业名称叫numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。
有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码,因为数字字符引用只用到ASCII字符集里的字符。所以,即使在gb2312编码的网页中,也可以用NCR显示埃及的象形文字了。
前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。”(引用内容)

