utf8ToUnicode

本文探讨了PHP中使用uni_encode函数对汉字进行Unicode编码的方法,并展示了如何在网页上正确显示包含特殊字符和链接的文本。
 <?php
$str = '哈哈天使打开附加了sd<div class=>sdfs</div>f了<a href="http://www.baidu.com">sdf</a> sdfdsf4jlaksj但是房价啊';
echo uni_encode($str);
echo "\r<br>";

echo "\r<br>";


/**
 * 对汉字进行Unicode编码 (#21704;&#21704;)
 * @param $str 汉字字符串
 * @param $code 汉字字符串的编码,默认utf-8
 */
function uni_encode ($str, $code = 'utf-8'){
    if($code != 'utf-8'){ $str = iconv($code, 'utf-8', $str); }
    $str = json_encode($str);
    $str = preg_replace_callback('/\\\\u(\w{4})/', create_function('$hex', 'return \'&#\'.hexdec($hex[1]).\';\';'), substr($str, 1, strlen($str)-2));
    return $str;
}
// 城乡划分代码 struct CXHFCODE { //行政区划代码 CString xzqhdm; // 行政区划名称 CString xzqhmc; // 行政区划全称 CString xzqhqc; // 行政区划级别 CString xzqhjb; // 省直辖市代码 CString szxsdm; // 省直辖市名称 CString szxsmc; // 市级代码 CString sjdm; // 市级名称 CString sjmc; // 区级代码 CString qjdm; // 区级名称 CString qjmc; // 镇街道代码 CString zjddm; // 镇街道名称 CString zjdmc; // 村居委会代码 CString cjwhdm; // 村居委会名称 CString cjwhmc; // 城乡划分代码 CString cxhfdm; }; 省直辖市名称 市级名称 区级名称 镇街道名称 村居委会名称 这六级对应的是 省、地市、县、乡、社区/村委会六级行政区划, | CXHFCODE data; while (sqlite3_step(stmt) == SQLITE_ROW) { CXHFCODE data; //行政区划代码 data.xzqhdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 0)); // 行政区划名称 data.xzqhmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 1)); // 行政区划全称 data.xzqhqc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 2)); // 行政区划级别 data.xzqhjb = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 3)); // 省直辖市代码 data.szxsdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 4)); // 省直辖市名称 data.szxsmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 5)); // 市级代码 data.sjdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 6)); // 市级名称 data.sjmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 7)); // 区级代码 data.qjdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 8)); // 区级名称 data.qjmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 9)); // 镇街道代码 data.zjddm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 10)); // 镇街道名称 data.zjdmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 11)); // 村居委会代码 data.cjwhdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 12)); // 村居委会名称 data.cjwhmc = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 13)); // 城乡划分代码 data.cxhfdm = UTF8ToUnicode((const char*)(char*)sqlite3_column_text(stmt, 14)); cxhfcodeVec_.push_back(data); } std::map<CString, std::map<CString, std::map<CString, std::map<CString, std::map<CString, CString>>>>> regions_; while 循环时如何把data数据插入到regions_中,请写一下
最新发布
07-10
为了将从 SQLite 查询得到的行政区划数据插入到 `std::map<CString, std::map<CString, std::map<CString, std::map<CString, std::map<CString, CString>>>>>` 数据结构中,需要在每次执行查询结果遍历时提取字段并逐层构建嵌套映射关系。 SQLite 查询使用 `sqlite3_step` 逐行获取结果集,每行对应一条行政区划记录[^1]。通过 `sqlite3_column_text` 获取每个字段的 UTF-8 编码字符串,并转换为 Unicode 字符串以适配 `CString` 类型[^3]。然后,依次填充省、市、区、镇、村等层级信息到嵌套 `std::map` 中。 ### 示例代码 以下代码展示如何将查询结果插入到五层嵌套的 `std::map` 结构中: ```cpp std::map<CString, std::map<CString, std::map<CString, std::map<CString, std::map<CString, CString>>>>> administrativeMap; while (sqlite3_step(stmt) == SQLITE_ROW) { // 提取字段值并转为Unicode CString province = UTF8ToUnicode((const char*)sqlite3_column_text(stmt, 0)); CString city = UTF8ToUnicode((const char*)sqlite3_column_text(stmt, 1)); CString district = UTF8ToUnicode((const char*)sqlite3_column_text(stmt, 2)); CString town = UTF8ToUnicode((const char*)sqlite3_column_text(stmt, 3)); CString village = UTF8ToUnicode((const char*)sqlite3_column_text(stmt, 4)); // 构建五级嵌套map结构 administrativeMap[province][city][district][town][village] = village; } ``` 上述代码中,每一层 `std::map` 对应一个行政区划级别,例如 `administrativeMap["广东省"]` 表示该省下的所有城市,而 `administrativeMap["广东省"]["广州市"]` 表示广州市下辖的所有区,依此类推。最终 `administrativeMap["广东省"]["广州市"]["天河区"]["石牌桥镇"]["石牌社区"]` 存储的是村委会或居委会名称。 ### 插入策略说明 - **逐层构建**:每次访问 `map[key]` 时,如果该键不存在则会自动创建一个新的子 `map`。 - **避免重复插入**:若存在相同路径的记录,最后一次插入的值会覆盖之前的值。 - **灵活性**:支持任意层级的缺失,例如可以仅插入省级和市级数据而不包含区县信息。 ### 遍历与查询操作 遍历整个结构可以使用多层嵌套循环,逐层输出省、市、区、镇、村信息。查询特定行政区划时,可通过链式访问实现快速定位: ```cpp if (administrativeMap.find(_T("广东省")) != administrativeMap.end() && administrativeMap[_T("广东省")].find(_T("广州市")) != administrativeMap[_T("广东省")].end() && administrativeMap[_T("广东省")][_T("广州市")].find(_T("天河区")) != administrativeMap[_T("广东省")][_T("广州市")].end() && administrativeMap[_T("广东省")][_T("广州市")][_T("天河区")].find(_T("石牌桥镇")) != administrativeMap[_T("广东省")][_T("广州市")][_T("天河区")].end() && administrativeMap[_T("广东省")][_T("广州市")][_T("天河区")][_T("石牌桥镇")].find(_T("石牌社区")) != administrativeMap[_T("广东省")][_T("广州市")][_T("天河区")][_T("石牌桥镇")].end()) { CString committee = administrativeMap[_T("广东省")][_T("广州市")][_T("天河区")][_T("石牌桥镇")][_T("石牌社区")]; std::wcout << "社区/村委会: " << CW2A(committee.GetString()) << std::endl; } else { std::wcout << "未找到指定的行政区划" << std::endl; } ``` 这种结构便于管理复杂的行政区划数据,并且支持高效的查询和更新操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值