使用Oracle,PHP和Oci8处理eacute和其他特殊字符
嗨,我正在尝试将名称存储到Oracle数据库中,并使用
PHP和oci8将其获取回来.
但是,如果我将é直接插入Oracle数据库并使用oci8将其取回,我只会收到一封电子邮件 在插入数据库之前,我是否必须将所有特殊字符(包括é)编码为html实体(即:& eacute;)或者我错过了什么? 谢谢 更新:3月1日18:40 发现这个功能: function charset_decode_utf_8($string) { if(@!ereg("[200-237]",$string) && @!ereg("[241-377]",$string)) { return $string; } $string = preg_replace("/([340-357])([200-277])([200-277])/e","'&#'.((ord('1')-224)*4096 + (ord('2')-128)*64 + (ord('3')-128)).';'",$string); $string = preg_replace("/([300-337])([200-277])/e","'&#'.((ord('1')-192)*64+(ord('2')-128)).';'",$string); return $string; } 似乎工作,虽然不确定它是否是最佳解决方案 更新:3月8日15:45 Oracle的字符集是ISO-8859-1. putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1"); 强制oci8连接使用该字符集. 更新时间:3月9日14:47 所以越来越近了. 问题实际上是在PHP方面. 我想如果我能够将PHP中的所有这些字符重新编码为字节大小为1的长度,然后将它们插入到Oracle中,它应该可以工作. 但是仍然没有运气 更新时间:3月10日11:05 我一直在想我是如此接近(但距离很远). 运行putenv( “NLS_LANG = AMERICAN_AMERICA.WE8ISO8859P9”);工作非常零星. 我创建了一个小的PHP脚本来测试: header('Content-Type: text/plain; charset=ISO-8859-1'); putenv("NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P9"); $conn= oci_connect("user","pass","DB"); $stmt = oci_parse($conn,"UPDATE temp_tb SET string_field = '|é|'"); oci_execute($stmt,OCI_COMMIT_ON_SUCCESS); 运行一次并直接登录到Oracle数据库后,我看到STRING_FIELD设置为|?|.显然不是我以前的经历所期望的. 看起来环境变量可能未在第一次执行脚本时正确设置或发送,但可用于第二次执行. 我的下一个实验是将变量导出到PHP的环境中,但是,我需要为此重置Apache …所以我们将看到会发生什么,希望它能正常工作. 我猜你知道这些事实:>有许多不同的字符集:你必须选择一个,当然,你知道你正在使用哪一个. 您还必须知道HTML实体未绑定到特定的字符集;相反,它们习惯于在独立于字符集的环境中表示字符. 你模糊地谈论ISO-8859-1和UTF-8.你想用什么字符集? ISO-8859-1易于使用,但它只能以一些拉丁语言(例如西班牙语)存储文本,并且它缺少像 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |