我在使用PostreSQL数组和html表单时遇到了一些麻烦。 假设我在网页中有一个文本字段,用户可以在其中编写以逗号分隔的字符串列表,例如名称列表。此列表存储在Postgres数据库中。
请求页面时
1)我的php代码用SELECT name_list FROM names;
填充文本字段,我得到的是:
| name_list |
|____________________|
| {alice,bob,carl} |
| .... |
| |
2)删除第一个和最后一个字符(括号)以获得可打印的字符串:
..
$arrayWithoutBrackets = substr($row['name_list'], 1,-1);
echo($arrayWithoutBrackets) ----> alice,bob,carl
..
该字符串是用户可以阅读并最终使用简单的html表单修改并发送回服务器的字符串。
但是,如果用户插入包含空格的名称(如alice,bob,carl,john doe
),该怎么办?更新表后会发生什么:
| name_list |
|_______________________________|
| {alice,bob,carl,"john doe"} |
| .... |
| |
Postgres会自动引用我的字符串,当用户重新加载页面时,他们会看到
alice,bob,carl,"john doe"
不是
alice,bob,carl,john doe
手动搜索引号字符并使用str_replace()
删除它们不是一个选项,因为我的应用程序中有许多基于数组的文本字段(数百个)。
有什么方法可以解决这个问题吗?
答案 0 :(得分:1)
你看到的双引号只是Postgres添加的明确输入/输出的装饰器。你删除前导和尾随花括号的方法非常糟糕。
要获得正确的输出,请使用array_to_string()
:
SELECT array_to_string(namelist, ', ') AS namelist_raw
FROM names
但请注意,Postgres使用引号是有原因的。如果分隔符字符串(示例中为', '
)包含在数组的任何元素中,则输出文本不明确。