- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想解决一个处理列出书名的“漂亮链接”或“永久链接”的问题,例如:
http://www.example.com/title/The-Catcher-in-the-Rye/
当我处理常规的书名时,比如有简单的单词或空格,没有问题,因为我可以简单地用短划线替换空格 -
并通过反向处理在数据库中查找书名 str_replace
.
但是,当我的书名中包含撇号 '
时,问题就出现了或冒号 :
在他们中,或两者都在这个例子中:
Why Can't I Be You: A Novel
在我的sql数据库中,所有的单引号都被转义了,所以数据库中的条目是这样的:
+-----+-------------------------------+
| BID | book_title |
+-----+-------------------------------+
| 1 | Why Can\'t I Be You: A Novel |
+-----+-------------------------------+
当我列出所有书名时,我再次取消转义字符串,所以它简单地列为:Why Can't I Be You: A Novel
我的 <a>
链接显示未转义的标题,以及通过用破折号替换空格并省略撇号和冒号创建的漂亮链接,如下所示:
<a href="http://www.example.com/title/why-cant-i-be-you-a-novel" title="Why Can't I Be You: A Novel">Why Can't I Be You: A Novel</a>
所以,解决我的问题。我希望能够列出所有格式化(未转义)的书籍标题,并使用连字符工作的“永久链接”/“漂亮链接”,并将正确的标题返回给 GET 方法。
在我的 .htaccess
条目,我有以下 RewriteRule
:
RewriteRule ^title/(.*[^/])/?$ viewbook.php?booktitle=$1 [NC,L]
这样做是采用 title/
之后的“漂亮”链接部分并通过 GET 将其发送到 viewbook.php
.例如,对于《麦田里的守望者》一书,以下内容是通过 GET 发送的:The-Catcher-in-the-Rye
没问题,因为在 php 中解决这个问题很简单:
$booktitle = $_GET['booktitle'];
$goodBookTitle = str_replace('-', ' ', $booktitle);
// or we can do it all at once
$booktitle = str_replace('-', ' ', $_GET['booktitle']);
// Send $booktitle to SQL query and find the book
当没有找到撇号时,此方法工作正常,但是,如果标题有撇号或冒号,则此方法无济于事,因为它不会在数据库中找到。我也不想使用 WHERE book_title LIKE '%$booktitle%'
自 viewbook.php
必须完全匹配。
我正在寻找一个优雅或简单的解决方案,使我能够通过 RewriteRule
解决这个问题并且不必为 slug
添加额外的表到数据库中或 permalink
,并且我不想在 url 中使用撇号,例如 %27 用于单引号。这是一个大型数据库,数据输入在电子表格中完成,导出为 CSV 并上传到 SQL 数据库。单个条目没有前端以允许诸如 slug
之类的事情或等效的。
我希望我的解释很清楚。
最佳答案
首先,在数据库中存储转义字符串的想法看起来很奇怪。 MySQL 能够存储任意字符的字符串,甚至可以安全地存储二进制序列。
现在关于从真实标题到漂亮 URL 的映射以及返回。将标题转换为 URL 友好字符串然后返回的想法不是解决问题的常用方法,因为很难使这种转换可逆。解决这个问题的通常方法是在数据库中有一个单独的列,其中包含修改为 URL 友好的书名。此列中的值也应该是唯一的。该表可能如下所示:
+-----+-----------------------------+----------------------------+
| BID | book_title | book_title_url |
+-----+-----------------------------+----------------------------+
| 1 | Why Can't I Be You: A Novel | why-can-t-i-be-you-a-novel |
+-----+-----------------------------+----------------------------+
您应该通过这些列索引您的表格,并在您的 viewbook.php
脚本中的 SQL 查询中使用它而不是 book_title
,如下所示:
SELECT * FROM books WHERE book_title_url='$booktitle'
其中 $booktitle
包含通过 $_GET['booktitle']
接收的书名并正确转义以防止 SQL 注入(inject)。
所以你漂亮的 URL 看起来像 http://www.example.com/title/why-can-t-i-be-you-a-novel
并且它们将被 Apache 重写为类似于 http://www.example.com/viewbook.php?booktitle=why-can-t-i-be-you-a-novel
。
同样,这是实现漂亮 URL 的常见方式。希望它也对你有用。
对于现有记录,您可以像这样填充 book_title_url
列:
UPDATE books SET book_title_url=REPLACE(REPLACE(REPLACE(book_title, " ", "-"), ":", "-"), "'", "-");
关于php - 漂亮链接中的撇号和冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15390562/
我正在尝试使用字符串类型的变量动态调用函数,即变量将包含字符串形式的函数名称。因此,我需要使用该变量调用函数。 所以,我正在使用 Scala Reflection。如果函数接受 Sting 数据类型,
class X extends Y { X(int a, int b) : super(a,b); } 有人可以给我解释冒号:的语法含义吗? 最佳答案 Dart 中的此功能称为“初始化列表”。 它
我正在寻找一些为旧的 jQuery 版本 v.1.6.4 编写的 jquery 代码。它有一个多属性选择器,如下所示: "span:[id^='someid-']" 选择器用于各种功能,如“查找”
This question already has answers here: How do you access the matched groups in a JavaScript regular
显然,冒号在 Java 中有多种使用方式。有人介意解释一下它的作用吗? 例如这里: String cardString = ""; for (PlayingCard c : this.list) /
我在用 c 编程,我将 c 代码编译为汇编代码,但是当我用 NASM 汇编程序重新编译代码时,它给我一个错误 操作数后预期的逗号、冒号、修饰符或行尾。这发生在 第 6 行,第 7 行和第 8 行。请帮
我正在寻找一个字符来使用文件名定界符(我将多个文件名存储在一个纯文本字符串中)。 Windows 似乎不允许 : , ? , * , , " , | , /和 \在文件名中。显然,\和 /不能使用,
我有一个变量 $entry 设置为: stdClass Object ( [im:name] => stdClass Object ( [label] => Amazing Breaker ) etc
这个问题不太可能对任何 future 的访客有帮助;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于互联网的全局受众。如需帮助使这个问题更广泛适用,visit the h
本文实例讲述了Python数据类型中的“冒号“[::]——分片与步长操作。分享给大家供大家参考,具体如下: 例如有如下字符串: ?
我创建了一个将 Excel 文件转换为 Access 数据库的应用程序。在转换过程中,MACAddress 列数据中的“:”符号需要替换为空格。 我尝试使用 replace 方法修改查询,但它不起作用
我在 ruby 中将散列转换为 yaml,但它添加了 : 到键:例如: :name: "Name" :value: "Value" 如果有办法避免并输出: name: "Name" value:
这个问题已经有答案了: 已关闭12 年前。 Possible Duplicate: VB Using colons to put two statements on same line 我在 Exce
我的 createSQLQuery() 方法使用具有 : 字符的表 Tables::IMS_EPISODE, 这将被视为a Paramater ,需要设置 有没有办法转义这个字符,这样它就不会被视为参
我收到了一个定义游戏“棋盘”对象的 Python 类,以及一些在构造函数中初始化的成员。大部分内容都很简单,但我不理解此代码段最后两行中集合初始化中“:”运算符的含义: class Board: BL
在我的元素中,有一个库生成元素的情况,我需要从那里选择特定的元素——恰好包含一个带有“:”的属性。 换句话说,我最终尝试选择使用:document.querySelectorAll("[xml:spa
这个问题在这里已经有了答案: Is there any difference between the `:key => "value"` and `key: "value"` hash notati
这个问题在这里已经有了答案: What does C++ struct syntax "a : b" mean (5 个回答) 关闭8年前。 struct _USBCHECK_FLAGS {
我在分配变量时不小心使用了 : 而不是 = ,令我惊讶的是它没有产生错误。例如,以下运行没有投诉: Python 3.7.4 (default, Jul 9 2019, 18:15:00) [Cla
我对定义/调用 Lua 函数时使用的冒号表示法感到非常困惑。 我以为我已经明白了,直到我看到这段代码: function string.PatternSafe( str ) return (
我是一名优秀的程序员,十分优秀!