Recode 函数

目录

  • recode — recode_string 的别名
  • recode_file — 根据 recode 请求将文件从一个文件重新编码到另一个文件
  • recode_string — 根据 recode 请求重新编码字符串
添加备注

用户贡献的备注 4 个备注

4
henrique at augusto dot com
10 年前
我在 php5-recode 和 php5-odbc 上遇到问题。安装了这两个包后,odbc_execute() 会挂起并导致分段错误。我使用一个简单的脚本进行测试

<?php
# DSN "mydb" with a user and password "marin"
$connect = odbc_connect("myaccess", "", "");

# query the users table for name and surname
$query = "SELECT * FROM FRT_NAME";

# perform the query
$result = odbc_exec($connect, $query);

# fetch the data from the database
while(odbc_fetch_row($result)){
$name = odbc_result($result, 2);
print(
"$name\n");
}

# close the connection
odbc_close($connect);
?>

卸载 php5-recode 后,问题得到解决。
2
pet at humaj dot sk
21 年前
希望这对某些人有所帮助

我尝试使用 recode 和 imap 编译 php 4.3.2-RC2(+一些旧版本)(以及 gd+png+jpeg 支持、ldap、gettext、zlib.. 但现在这些并不重要)。

为什么?我需要运行 Imp + Horde + Turba。Turba 与 LDAP 目录通信(LDAP 使用 utf-8 编码,我需要将其转换为 iso-8859-2),所以我修改了 Turba 以使用“recode”进行 utf8<->iso8859-2 的字符集转换。

系统:FreeBSD4.7+Apache 1.3.27+Ben SSL

我无法正确编译,或者在编译后,apache 发生核心转储。

问题是:imap(libc-client)和 recode(librecode)使用相同的函数 hash_lookup()。因此,在加载 libphp.so(及其依赖的库)时,整个 apache 崩溃了。没有任何提示发生了什么。

可以通过强制静态链接来检测问题(在 FreeBSD 中修改 librecode.la 并更改
library_names='librecode.so.0 librecode.so librecode.so'

library_names='librecode.a'

现在,在链接 php 时,链接器会抱怨 hash_lookup 的双重定义。

解决方案

- 从 ftp://ftp.gnu.org/pub/gnu/recode/ 获取 recode3.6
- 解压缩,转到 src,在文件 combine.c、hash.c、names.c、recode.c、testdump.c、html.c、hash.h 中将 hash_lookup() 替换为 hash_lookupX() [或发明一个更好的名称]
编译 recode(我必须执行

setenv CFLAGS "-I/usr/local/include"
setenv LDFLAGS "-L/usr/local/lib -lintl"
./configure --prefix=/usr/local/recode --exec-prefix=/usr/local/recode --without-included-gettext
make
make check
make install

(recode 安装到 /usr/local/recode。您可以更改此位置,也可以强制静态链接 recode,这样在构建 libphp.so 后,就不再需要此修改后的 recode,可以将其删除!)

由于某种原因,此 recode 需要外部定义的
int error;
因此,我们必须修改配置脚本 + 一个 .c php 源文件

1. 修改 php 的配置脚本:查找
recode_format_table();
并在 main() 开始之前的某个地方添加
int error;

所以结果是

char *program_name;
int error;
int main() {
recode_format_table();
; return 0; }

(我在 php4.3.2rc2 的配置中修改了 recode_format_table() 的两个出现)

2. 运行配置,应该可以正常工作(我的另一个问题是关于 imap:虽然我的 c-client 是在没有 ssl 的情况下编译的,但配置抱怨它正在使用 ssl,所以我必须再次编辑配置,并注释掉以下几行
void mm_searched(void){}
void mm_expunged(void){}
// char ssl_onceonlyinit(); --- 注释掉
int main() {
// ssl_onceonlyinit(); --- 注释掉
return 0;
}

现在,配置相当高兴 :-)

记录一下:我做了
./configure --with-apxs=/usr/local/apache/bin/apxs --with-imap --enable-sysvsem --enable-sysvshm --with-sybase=/usr/local/freetds --with-gettext --with-ldap --with-zlib --with-recode=/usr/local/recode -with-gd=/usr/local --with-jpeg-dir=/usr/local --with-png-dir=/usr/local

3. 编辑 ext/recode/recode.c(或任何其他 .c 源文件,在某个地方添加(例如在末尾)
int error;

如果没有它,在链接时会抱怨“error 未定义”。

4. 执行“make”,您的 php 就完成了 :-)

我花了 2 天时间.. 所以不要删除此备注,有些人甚至会发现它有用,并给我发邮件表示感谢:-]
1
cv at corbach dot de
22 年前
当将 PHP 编译到 Apache 中作为静态模块时,Apache 配置会抱怨 librecode 中的未定义符号。您需要 recode-3.6(例如在 ftp://ftp.gnu.org/pub/gnu/recode/ 上)来消除此错误。无论您是将 PHP 编译为 DSO,还是以静态方式编译都没有关系。
-2
theather at I dot am
19 年前
我看到 Recode (3.6) 模块也与 MySQL 模块以及上面“警告”备注中提到的其他模块不兼容。
To Top