我有这个代码:
<?php
$conn = mysqli_connect("localhost", $db['username'], $db['password'], "the_table");
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "SELECT * FROM xlsws_images";
if(!$result = $conn->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
$path = $row['image_path'];
echo $path;
}
?>
它按预期工作,直到它到达带有双引号的image_path
的行,例如 product/1/1”-wood-wheel-casters-set-of-4.png
.在这种情况下,它返回没有双引号的路径,就像 product/1/1-wood-wheel-casters-set-of-4.png
.
是什么让这些引号消失了,我怎样才能避免这种情况?
"...其中有双引号,例如 product/1/1"
这是一个卷曲的(聪明的)报价”
,应该改为"
。(也就是说,如果您在问题中向我们展示的是数据库中报价的实际类型)。
这就是为什么它让你失望并从一开始就被引入你的数据库。
您可以使用替换
- http://dev.mysql.com/doc/en/replace.html
- http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace
以在表格中更改它们。(甚至删除它们)。
理想情况下,您应该注意在它到达数据库之前摆脱该报价。
-
str_replace()
也可以(也)帮助您解决这个问题。 - http://php.net/manual/en/function.str-replace.php
编辑:
在测试过程中,以下内容,回显product/1/1”-wood-wheel-casters-set-of-4.png
$result = $connection->query("SELECT * FROM table");
while($row = $result->fetch_object()){
echo $row->path_column;
}
因此,很难说是什么原因导致代码失败。
您可以尝试的一些方法是:
$path = mysqli_real_escape_string($conn, $row['image_path']);
和
$path = htmlentities(stripslashes($row['image_path']));
使用str_replace()
的示例:
$str = "product/1/1”-wood-wheel-casters-set-of-4.png";
echo $newstring = str_replace("”", "", $str);
其中产生了:
product/1/1-wood-wheel-casters-set-of-4.png
- 如果您希望在文件上传方面走这条路。
在上传文件期间,请参阅以下关于 Stack 的问答以替换字符(重命名):
旁注:它旨在用下划线替换空格,但您可以基于相同的逻辑。
- 将上传文件中的空格替换为下划线
还有一些可能有用的例子。
这摆脱了引用:
$result = $conn->query("SELECT * FROM table");
while($row = $result->fetch_object()){
$new = $row->path_column;
$newstring = str_replace("”", "", $new);
}
echo $newstring;
并将新更改的卷曲引号转义为常规引号:
$result = $conn->query("SELECT * FROM table");
while($row = $result->fetch_object()){
$new = $row->path_column;
$newstring = str_replace("”", "'"", $new);
}
echo $newstring;
那个人产生了product/1/1"-wood-wheel-casters-set-of-4.png
- 请注意
"
而不是智能引号”
。
编辑:
事实证明,这是在设置连接之前传递 UTF-8 的问题。
OP:"太好了! $conn->set_charset('utf8mb4');
奏效了。这就是我需要添加到上面的代码中的全部内容。现在无缝工作。谢谢!– 约书亚·古森"。
根据我对OP的评论:
"您也可以在查询之前尝试将 UTF-8 设置为连接。看看这个关于Stack UTF-8的问答,一直到那里有一些答案。连接的东西$connection->set_charset('utf8mb4');
作为示例,并在打开数据库连接之前使用。
- 按照 UTF-8 中的建议一直到