Php 在Magento中保存订单之前删除外来重音字符

Php 在Magento中保存订单之前删除外来重音字符,php,magento,Php,Magento,我有一个问题,我在Magento的订单有时会有发货和账单地址以及带有类似于òù的外国口音的名称。在将订单保存到Magento之前,我想将它们转换为英文字母aoeu 我有它的php代码,这是一个函数 public function removeAccents($str) { $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó'

我有一个问题,我在Magento的订单有时会有发货和账单地址以及带有类似于òù的外国口音的名称。在将订单保存到Magento之前,我想将它们转换为英文字母aoeu

我有它的php代码,这是一个函数

public function removeAccents($str)
{
    $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'Ð', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', 'Œ', 'œ', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'Š', 'š', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Ÿ', 'Z', 'z', 'Z', 'z', 'Ž', 'ž', '?', 'ƒ', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', '?', '?', '?', '?');
    $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');
    return str_replace($a, $b, $str);
}
我在OnepageController saveShippingAction方法中使用了这个函数,比如

$data['street'][0] = removeAccents($data['street'][0]);
$data['street'][1] = removeAccents($data['street'][1]);
$data['city'] = removeAccents($data['city']);
$data['city'] = "test";
$data['region'] = removeAccents($data['region']);
在保存配送地址之前

我的主题中已经有一个OnepageController,但它有一个核心法师控制器中没有的功能。因为我在这里修改一个核心法师控制器,只是复制函数saveShippingAction似乎不起作用,控件转到核心saveShippingAction函数

我还尝试通过添加前端属性来修改config.xml,但似乎不起作用。我不知道是否有更简单的方法来实现我想要的(比如将etc/config.xml中的UTF-8更改为拉丁语-1iso?)


我希望在这个论坛上有人能对这个问题以及如何解决它提出一些看法!谢谢

如评论海报所示,保留地址和原始字符是有意义的。但是,如果您确实必须这样做,最好在保存事件之前创建一个观察者来捕获
sales\u quote\u address\u

在observer函数中,您可以通过调用

public function convertAddressChars(Varien_Event_Observer $observer) 
{ 
    $address = $observer->getEvent()->getObject();
    /**
    * Perform necessary manipulations, e.g.
    * $address->setData('city', removeAccents($address->getData('city'));
    */
}

但同样,未能在地址数据中保留重音符号可能会导致无法交付订单。

这实际上是一个常见问题-一些运输/配送公司无法处理太多的UMLAUT等

您可能希望尝试的另一种方法是整理前端javascript中的客户地址详细信息。当我尝试这一点时,我手头没有代码,但是它足够简单。您可以通过两种方式完成此操作-聆听“onblur”事件并在客户填写其详细信息时整理文本,也可以在提交每个部分以组成订单时完成此操作


抱歉,这只是一种方法,而不是代码,如果您选择这种方法,我可能会为您挖掘一些信息…

为什么不首先正确配置数据库,以免被重音字符阻塞?所以您想将我的实际地址更改为完全不同的地址,因为你不能处理重音字符?