我们销售需要带有字符限制的文本字段的可配置产品(我们销售带有客户姓名的个性化手镯)。
因此,我们在产品页面上创建了一个限制为 15 个字符的文本字段。
如果我在这个字段中输入例如:“abcdefghijklmno”(这是 15 个字母),它会非常有效。
但是,如果我输入“abcdéfghijklmno”(仍然是 15 个字母,但带有“e”锐角),它就不起作用,它说“请指定产品选项”。
经过几次测试,我发现带有重音符号的字母被计为 2 个字符。
我怎样才能避免这个错误?
我们销售需要带有字符限制的文本字段的可配置产品(我们销售带有客户姓名的个性化手镯)。
因此,我们在产品页面上创建了一个限制为 15 个字符的文本字段。
如果我在这个字段中输入例如:“abcdefghijklmno”(这是 15 个字母),它会非常有效。
但是,如果我输入“abcdéfghijklmno”(仍然是 15 个字母,但带有“e”锐角),它就不起作用,它说“请指定产品选项”。
经过几次测试,我发现带有重音符号的字母被计为 2 个字符。
我怎样才能避免这个错误?
这很可能是字符编码的问题——例如 UTF-8 与 Latin1。
你没有提到你正在使用什么编程语言。猜测它是一个 web 应用程序并且它是 PHP 的可能性,你可以使用mb_strlen
(which count characters ) 而不是strlen
(which counts bytes )。
如果不是 PHP,其他编程语言也有类似的功能来计算字符而不是字节。
ÉÉÉ
用html_entity_decode($string);
$example = html_entity_decode("abcdéfghijklmno");
print_r($example);
尝试学习htmlentities和html_entity_decode
如果你想替换所有的急性,
在指定产品选项url_encode之前,您必须创建一个列表并 str_replace 它
感谢您,我也找到了解决方案:
您必须编辑此文件:app/code/core/Mage/Catalog/Model/Product/Option/Type/Text.php
替换(大约第 49 行):
if (strlen($value) == 0 && $option->getIsRequire() && !$this->getProduct()->getSkipCheckRequiredOption()) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('请指定产品所需的选项。')); } if (strlen($value) > $option->getMaxCharacters() && $option->getMaxCharacters() > 0) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('文本太长'));
经过 :
if (mb_strlen($value,'UTF-8') == 0 && $option->getIsRequire() && !$this->getProduct()->getSkipCheckRequiredOption()) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('请指定产品所需的选项。')); } if (mb_strlen($value,'UTF-8') > $option->getMaxCharacters() && $option->getMaxCharacters() > 0) { $this->setIsValid(false); Mage::throwException(Mage::helper('catalog')->__('文本太长'));