一个civicrm的bug以及work around

最近在帮同心慈善会实施他们的IT系统,也似乎成了国内第一个用civicrm来实施慈善项目的人。恩~主要是海涛同学。我只负责技术支持和顾问而已了。

估计是因为之前civicrm很好有非英语国家的人用,所以在使用中还是发现了一些问题的。例如刚开始的界面中文问题,可喜的是已经在免费午餐IT小组各位同仁的努力下完成了整个软件的汉化了。这两天又碰到一个中文输入的问题。

问题是这样的,在创建自定义数据组和自定义数据的时候,发现如果名字定义为中文,那只能插入一个数据,之后的数据插入总会报告数据已经存在的错误。仔细分析了一下PHP的代码,发现了问题的所在,但是PHP实在是不灵。所以只是提供了一个简陋的work around并且去civicrm的开发者论坛上发了一贴:http://forum.civicrm.org/index.php/topic,22276.0.html  希望他们能够解决这个问题。

这里我也记录一下我的work around,以便有其他同学遇到了以后可以作为参考。我就直接把我论坛上的帖子内容贴上了,就懒得翻译了再~

In the munge method of /Utils/String.php,  there is a line:
$name = preg_replace(‘/\s+|\W+/’, $char, trim($name) );
But if the $name is a Chinese string, the return value of preg_replace always be ‘_’ regardless what the exact value of $name is.

I worked around this problem by adding the following lines:
$oldName = $name;
$name = preg_replace(‘/\s+|\W+/’, $char, trim($name) );
if ( $name==’_’ ) $name = $oldName;

这个问题,各位PHP programmer有什么好的思路?

Tags: ,

One Comment

Leave a Reply

XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>