我需要使用 Symfony 的 link_to()
方法生成带有 Javascript 确认对话框的链接。确认对话框文本从数据库条目中获取部分内容:
<?php echo link_to( "click here", 'category/delete?id='.$id, array( 'confirm' => 'Are you sure you want to delete the category: '.$category->getName().'?' ) ) ?>
但如果数据库条目中有一个单引号
,确认对话框将不起作用,因为生成的 JS 被单引号包围。因此,如果我有一个名为“John's Articles”的类别,生成的 JS 将像这样开始:
<a onclick="if (confirm('Are you sure you want to delete the category: John's Articles?')) { var f = document.createElement('form'); f.styl.... etc... "
所以,那里的单引号搞砸了确认等......
无论如何,我想我会简单地通过 addslashes()
运行 $category->getName()
但它没有添加任何斜杠...我也尝试保存提前将类别名称作为单独的变量输出,并为其添加斜杠。但它没有添加任何东西。然后我开始查看 Symfony 的 escaping methods并找到了类似 esc_entities()
的方法,但它们导致文本看起来像 John's Articles
。
我该怎么办?我想要做的就是在该字符串中的单引号之前添加一个斜杠。我从未尝试过 str_replace("'","\'",$category->getName())
但它甚至没有做任何事情。我可以在我的模板中创建自己的基本字符串,例如 Alex's Test
和 addslashes()
就可以了。只是数据库中的这个值我无法添加任何斜杠。
当我查看数据库中的值时,它看起来就像John's Articles
。没有特殊字符或编码字符。
我在这里错过了什么?
更新
我尝试了以下代码,结果如下:
echo $category->getName()."<br/>";
echo addslashes($category->getName())."<br/>";
$tmp = $category->getName();
echo addslashes($tmp)."<br/>";
$tmp = addslashes($category->getName());
echo $tmp."<br/>";
$tmp = "Testing's the Testing";
echo addslashes($tmp)."<br/>";
$tmp = str_replace("'","\\'",$category->getName());
echo $tmp;
结果:
John's Articles John's Articles John's Articles John's Articles Testing\'s the Testing John's Articles
数据库中的值根本不会添加斜杠...
最佳答案
好像你只是用
addslashes($category->getName())
但是您需要将返回值分配给其他变量,例如。
$nameWithSlashes=addslashes($category->getName())
关于php - 交响乐 : escape single quote string from database?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001773/