我正在尝试通过获取 youtube iframe 的 src 并将其用作 标签的 src 来从 iframe 标签切换到 标签,我已经将视频源作为一个大字符串放在页面表单中并通过这个 char '|' 将它分成更小的部分所以每个 标签都知道他必须引用哪个 src 索引。我的问题是我想使用这种格式拍摄 youtube 视频的图像:
https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg
从拆分的字符串中,为了得到这张图片,我试图重新拆分源字符串,以获取视频 ID(并因此获得视频图像),下面是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
string [] values = ImageFieldValues.Split('|');
if (values.Length != 0) {
foreach (string source in values)
{
litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;' href='" + source+ "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ source.Substring(26) + "/hqdefault.jpg'/></a>";
AddToDivImages.Controls.Add(litCon);
}
}
}
这是在 kentico 项目的转换中使用的自定义控件,视频源加载正常,唯一的问题是 source.substring(26),它返回一个错误,指出索引超出边界,它只是为索引 (0) 工作,任何大于零的数字都会返回相同的错误,我还尝试修剪、拆分、删除...就像将整个字符串作为一个 block 一样,这是事件日志的屏幕截图在肯蒂科 Event Logs
最佳答案
如果没有看到 ImageFieldValues
的初始值,很难说它为什么不起作用。可能是您有一个空字符串(由字符串末尾的附加管道创建)?尝试使用 Split
的重载来删除空条目:
ImageFieldValues.Split(new[] { "|"}, StringSplitOptions.RemoveEmptyEntries);
根据上面的内容,我假设 ImageFieldValues
看起来像这样:
https://www.youtube.com/watch?v=dQw4w9WgXcQ|https://www.youtube.com/watch?v=wZZ7oFKsKzY
您可能想尝试使用正则表达式,而不是使用子字符串。我看了一下,您应该能够通过以下方式实现您的目标:
protected void Page_Load(object sender, EventArgs e)
{
string pattern = "watch\\?v=(?<code>[A-Za-z0-9_]*)";
string [] values = ImageFieldValues.Split('|');
if (values.Length != 0) {
foreach (var source in values)
{
Match match = Regex.Match(source, pattern);
litCon.Text = "<a name='testiFrame' data-fancybox-type='iframe' id='runtimeIFrame' class='col-xs-3 various fancybox.iframe' style='margin-bottom: 10px;float: right;' href='" + source + "'><img id='iframeImage' src='http://img.youtube.com/vi/"+ match.Groups["code"].Value + "/hqdefault.jpg'/></a>";
AddToDivImages.Controls.Add(litCon);
}
}
这消除了对您为 source.Substring
使用的索引的依赖,如果 URL 结构发生变化,它将保护您。如果您不熟悉正则表达式,可以在此处找到模式的分割:https://regex101.com/r/3Y0ZNY/1
关于c# - kentico 无法修剪字符串,错误 outOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47607498/