mysql结果在这里截断,但不存在

时间:2012-02-25 17:47:23

标签: php mysql

我在这里的第一篇文章。我有一个mysql表,   - InnoDB   - latin1-bin 大约有300行/ 9列。这是一个合唱库,因此除了自动递增的键索引列之外,大多数列都是varchar。就像书籍收藏一样;标题,作者,作曲家等。

CMS中有两种类型的视图,列表视图和记录视图。它们很像桌面应用程序中的典型列表和记录视图,例如Lotus Approach或MS Access。

列表视图构建在包含标题(th),行(tr)和数据(td)的表上。每页30个结果。记录视图建立在文本输入上,可以修改数据,创建/删除或搜索记录,并且一次只显示一条记录。

问题在于列表视图中包含字幕(双引号字符串)的标题不会被截断,数据显示也很完美(来自“St. Cecilia Mass”的Santus和Bendictus)。

echo "<td class='whiteData'>$row[TITLE]</td>";

但是,文本输入中的相同代码不起作用: 允许转义字符,将代码更改为:

echo "<input type='text' name='title' id='title' value= \"$row[TITLE]\" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />";

产生“Santus和Benedictus”。请记住,第一个代码片段来自索引视图,第二个代码片段来自浏览/编辑视图。我尝试过其他组合,例如:

...'$row[TITLE]'  or  $row["TITLE"]  or  $row['TITLE']  

最后两个语句中的任何一个都会抛出一个php错误而只是杀死该页面。带双引号的转义字符会产生双引号的所有内容。用单引号括起表达式可以纠正问题,但随后会在标题“上帝的奇妙之爱”中创建另一个问题,在撇号中将其截断。同样,问题仅存在于记录视图(文本输入)上,而不存在于表(列表视图)上。

我的问题:为什么行为上的差异?查询不会截断数据。我知道我可以简单地指示用户不要使用双引号字符串,这似乎解决了这个问题。但我只是觉得好奇。

希望我没有错过任何东西。第一篇文章不允许我发布图片,所以我希望没有任何内容脱离背景。

感谢。

2 个答案:

答案 0 :(得分:0)

我不知道为什么会发生这种情况,但您总是可以使用正则表达式来解析值并转义视图中任何显眼的字符。

答案 1 :(得分:0)

当您在框中插入值时,问题是'value'属性的引号与值本身中的引号冲突。此冲突导致值被截断。

下面是假设$ row ['title']包含的输出结果的示例(来自“St. Cecilia Mass”的Santus和Bendictus):

<input type='text' name='title' id='title' value="Santus and Bendictus from "St. Cecilia Mass"" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />

所以这里发生的是,值中的第一个引号被视为'value'属性的结束引用。因此,文本框只显示(Santus和Bendictus来自)

我认为你需要的是对htmlentities()的调用。像这样:

- 单引号中包含的值

echo "<input type='text' name='title' id='title' value='" . htmlentities($row[TITLE]) . "' style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />";

- 用双引号括起来的值

echo "<input type='text' name='title' id='title' value=\"" . htmlentities($row[TITLE]) . "\" style='width:390px; margin-right:150px; maxlength:75; margin-top:15px' />";

希望它有所帮助!