小编Bil*_*l H的帖子

从字符串中删除隐藏字符

这应该很简单,但我无法弄清楚.

有问题的网站是UTF-8编码的.

客户在我们的网站上填写表格时遇到了问题.以下是他们输入的示例数据.

SPICER-SMITHS迷失了

它看起来像一个常规字符串,但当你将该字符串复制到像记事本++这样的应用程序时,你会看到一个"?" 出现在单词"SMITHS"("SMITH?S")中.

脚本清理字段并执行删除以下字符的额外步骤: "\r\n", "\n", "\r", "\t", "\0", "\x0B".

虽然它没有抓住这个隐藏的角色.

有谁知道这里发生了什么?

编辑:我正在使用PHP.这是我用来清理字段的函数:

function strip_hidden_chars($str)
{
    $chars = array("\r\n", "\n", "\r", "\t", "\0", "\x0B");

    $str = str_replace($chars," ",$str);

    return preg_replace('/\s+/',' ',$str);
}
Run Code Online (Sandbox Code Playgroud)

编辑2:@thaJeztah引导我回答.我正在测试的字符串是客户从她正在使用的任何应用程序复制并粘贴它后我们的支持票据的输出.实际输入是

SPICER-SMITH'S

php utf-8 character-encoding

7
推荐指数
1
解决办法
2万
查看次数

从具有超媒体约束的REST API提供响应时,如何向客户端指示要使用哪种HTTP方法(动词)?

我认为我对RESTful架构的原则有很好的把握,但我还没有.

我似乎无法弄清楚的部分是客户如何知道每种资源可用的HTTP方法?当应用程序流中需要特定操作以继续进程时,该怎么办?

简化示例:

假设客户端向我的REST API下了一个简单的订单.

客户将发送邮件请求:http://api.mycompany.com/orders

请求有效负载

<order>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>
</order>
Run Code Online (Sandbox Code Playgroud)

假设请求成功

响应有效负载

<order>
    <id>156</id>
    <status>Pending Payment</status>
    <items>
        <sku>12345</sku>
        <quantity>1</quantity>
    </items>    
    <links>
        <link rel="order" url="http://api.mycompany.com/orders/156" />
        <link rel="invoice" url="http://api.mycompany.com/payments/156" />
        <link rel="payment" url="http://api.mycompany.com/invoices/156" />
    </links>
</order>
Run Code Online (Sandbox Code Playgroud)

如果我正确理解超媒体约束,我提供相应的资源,客户可以选择从那里去的地方.

在上面的例子中,rel ="order"的链接可以是GET,PUTDELETE请求.与rel ="invoice"的链接仅限于GET请求.与rel ="payment"的链接只接受POST请求.

客户如何知道这一点?我知道如果他们向上述资源之一提出OPTIONS请求,它应该给他们可用的方法,但我不确定这是否是处理这种情况的标准方法.

任何帮助将不胜感激.

architecture api rest hateoas

5
推荐指数
1
解决办法
1222
查看次数

如何在数据库表中指定客户默认送货地址?

这是一个简单的例子:

假设我有一个与地址表具有一对多关系的客户表(客户可以有多个送货地址,但送货地址只能属于一个客户).

Customer Table
-------------
customer_id (PK)


Address Table
-------------
address_id (PK)
customer_id (FK)
Run Code Online (Sandbox Code Playgroud)

现在我希望每个客户都能够指定默认的送货地址.

我可以想到两种方法,但都有缺点.

选项1

将一个布尔列添加到名为"is_default"的地址表中.

优点

  1. 选择查询很简单
  2. 如果他们看到数据库模型,那么其他人可以直接理解

缺点

  1. 应用程序被强制执行并维护"只有一行可以是默认值"约束.
  2. 更新默认字段很痛苦,因为它要求应用程序检查并重置以前的默认选项.

选项2

在Customer表中添加一个名为"address_id"的列,并将其设为外键(如果不存在地址,也允许空值).

优点

  1. 如果用户决定更改默认地址,则可以轻松更新.
  2. 数据库维护"只有一行可以是默认值"约束.

缺点

  1. 每次我决定添加某种默认元数据时,我都必须向Customers表添加一个新的索引列.

  2. 看起来像一个黑客

我的问题是,有没有一种标准的方法来处理我忽略的这种情况?当然还有其他选项(可能会创建一个EAV默认选项表?)但我更喜欢保持它尽可能简单,因为对现有代码库进行了更改,所以我不想破坏任何东西.

mysql database

5
推荐指数
1
解决办法
291
查看次数

如何在PHP中将RGB转换为1px base64编码数据uri

我试图找出一种更有效的方法,从php中的单个RGB颜色代码创建1px x 1xx图像(jpg,png和gif).

下面的例子说明了这样做的一种方法,但我希望某种算法能够获得相同的输出,而无需加载任何库或php扩展.

例:

function rgbToDataUri($r,$g,$b,$type)
{
    $im = imageCreateTrueColor(1, 1);

    imageFill($im, 0, 0, ImageColorAllocate($im,$r,$g,$b));

    ob_start();

    switch($type)
    {
        case 'gif':
            imageGif($im);
            break;
        case 'jpg':
        case 'jpeg':
            imageJpeg($im);
            break;
        default:
            imagePng($im);
    }

    $img = ob_get_contents();

    ob_end_clean();

    return 'data:image/' . $type . ';base64,' . base64_encode($img);
}

echo rgbToDataUri(0,0,0,'gif');
Run Code Online (Sandbox Code Playgroud)

输出:

data:image/gif;base64,R0lGODdhAQABAIAAAAQCBAAAACwAAAAAAQABAAACAkQBADs=
Run Code Online (Sandbox Code Playgroud)

我的目标是(优先顺序):

  1. 内存消耗低
  2. 处理器效率高
  3. 加工速度快

要求包括支持gif,jpg和png.每个请求都会创建20到50个这样的单像素图​​像(每个像素独立于其他像素).

如何为1px单色图像生成二进制文件?

php base64 image

5
推荐指数
1
解决办法
2279
查看次数

标签 统计

php ×2

api ×1

architecture ×1

base64 ×1

character-encoding ×1

database ×1

hateoas ×1

image ×1

mysql ×1

rest ×1

utf-8 ×1