1

我们销售需要带有字符限制的文本字段的可配置产品(我们销售带有客户姓名的个性化手镯)。

因此,我们在产品页面上创建了一个限制为 15 个字符的文本字段。

如果我在这个字段中输入例如:“abcdefghijklmno”(这是 15 个字母),它会非常有效。

但是,如果我输入“abcdéfghijklmno”(仍然是 15 个字母,但带有“e”锐角),它就不起作用,它说“请指定产品选项”。

经过几次测试,我发现带有重音符号的字母被计为 2 个字符。

我怎样才能避免这个错误?

4

3 回答 3

1

这很可能是字符编码的问题——例如 UTF-8 与 Latin1。

你没有提到你正在使用什么编程语言。猜测它是一个 web 应用程序并且它是 PHP 的可能性,你可以使用mb_strlen(which count characters ) 而不是strlen(which counts bytes )。

如果不是 PHP,其他编程语言也有类似的功能来计算字符而不是字节。

于 2012-08-28T14:44:49.677 回答
0

ÉÉÉ

html_entity_decode($string);

$example = html_entity_decode("abcdéfghijklmno");
print_r($example);

尝试学习htmlentitieshtml_entity_decode

如果你想替换所有的急性,

在指定产品选项url_encode之前,您必须创建一个列表并 str_replace 它

于 2012-08-28T14:40:07.163 回答
0

感谢您,我也找到了解决方案:

您必须编辑此文件: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')->__('文本太长'));
于 2012-08-28T16:15:12.730 回答